diff options
author | raveit65 (via Travis CI) <[email protected]> | 2024-02-21 17:40:43 +0000 |
---|---|---|
committer | raveit65 (via Travis CI) <[email protected]> | 2024-02-21 17:40:43 +0000 |
commit | c0d1c4d85f969d652508d63816f65315ae18cd7e (patch) | |
tree | 1897597961bae6e69b1ce512384c974044840305 | |
download | caja-dropbox-gh-pages.tar.bz2 caja-dropbox-gh-pages.tar.xz |
Deploy mate-desktop/caja-dropbox to github.com/mate-desktop/caja-dropbox.git:gh-pagesgh-pages
99 files changed, 60744 insertions, 0 deletions
diff --git a/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/index.html b/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/index.html new file mode 100644 index 0000000..7da8101 --- /dev/null +++ b/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/index.html @@ -0,0 +1,97 @@ +<html> +<head> +<title>rootdir - scan-build results</title> +<link type="text/css" rel="stylesheet" href="scanview.css"/> +<script src="sorttable.js"></script> +<script language='javascript' type="text/javascript"> +function SetDisplay(RowClass, DisplayVal) +{ + var Rows = document.getElementsByTagName("tr"); + for ( var i = 0 ; i < Rows.length; ++i ) { + if (Rows[i].className == RowClass) { + Rows[i].style.display = DisplayVal; + } + } +} + +function CopyCheckedStateToCheckButtons(SummaryCheckButton) { + var Inputs = document.getElementsByTagName("input"); + for ( var i = 0 ; i < Inputs.length; ++i ) { + if (Inputs[i].type == "checkbox") { + if(Inputs[i] != SummaryCheckButton) { + Inputs[i].checked = SummaryCheckButton.checked; + Inputs[i].onclick(); + } + } + } +} + +function returnObjById( id ) { + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +var NumUnchecked = 0; + +function ToggleDisplay(CheckButton, ClassName) { + if (CheckButton.checked) { + SetDisplay(ClassName, ""); + if (--NumUnchecked == 0) { + returnObjById("AllBugsCheck").checked = true; + } + } + else { + SetDisplay(ClassName, "none"); + NumUnchecked++; + returnObjById("AllBugsCheck").checked = false; + } +} +</script> +<!-- SUMMARYENDHEAD --> +</head> +<body> +<h1>rootdir - scan-build results</h1> + +<table> +<tr><th>User:</th><td>root@e4f2a4aebe6d</td></tr> +<tr><th>Working Directory:</th><td>/rootdir</td></tr> +<tr><th>Command Line:</th><td>make -j 2</td></tr> +<tr><th>Clang Version:</th><td>clang version 12.0.0 (Fedora 12.0.0-0.3.rc1.fc34) +</td></tr> +<tr><th>Date:</th><td>Sat May 29 19:34:55 2021</td></tr> +</table> +<h2>Bug Summary</h2><table> +<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead> +<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">2</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr> +<tr><th>Logic error</th><th colspan=2></th></tr> +<tr><td class="SUMM_DESC">Cast from non-struct type to struct type</td><td class="Q">2</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_cast_from_non-struct_type_to_struct_type');" checked/></center></td></tr> +</table> +<h2>Reports</h2> + +<table class="sortable" style="table-layout:automatic"> +<thead><tr> + <td>Bug Group</td> + <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind"> ▾</span></td> + <td>File</td> + <td>Function/Method</td> + <td class="Q">Line</td> + <td class="Q">Path Length</td> + <td class="sorttable_nosort"></td> + <!-- REPORTBUGCOL --> +</tr></thead> +<tbody> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-7ad019.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-7ad019.html" --> +</tr> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-8893d3.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-8893d3.html" --> +</tr> +</tbody> +</table> + +</body></html> diff --git a/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/report-7ad019.html b/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/report-7ad019.html new file mode 100644 index 0000000..297d58f --- /dev/null +++ b/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/report-7ad019.html @@ -0,0 +1,1225 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/12.0.0 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -D PIC -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/12.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir /rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2021-05-29-193455-5826-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "S") { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].checked = !checked; + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> +</form> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + s.classList.remove("selected"); + }); + el.classList.add("selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); +} + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "j") { + navigateTo(/*up=*/false); + } else if (event.key == "k") { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/report-8893d3.html b/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/report-8893d3.html new file mode 100644 index 0000000..b670096 --- /dev/null +++ b/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/report-8893d3.html @@ -0,0 +1,1225 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/12.0.0 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/12.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir /rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2021-05-29-193455-5826-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "S") { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].checked = !checked; + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> +</form> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + s.classList.remove("selected"); + }); + el.classList.add("selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); +} + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "j") { + navigateTo(/*up=*/false); + } else if (event.key == "k") { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/scanview.css b/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/scanview.css new file mode 100644 index 0000000..cf8a5a6 --- /dev/null +++ b/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/scanview.css @@ -0,0 +1,62 @@ +body { color:#000000; background-color:#ffffff } +body { font-family: Helvetica, sans-serif; font-size:9pt } +h1 { font-size: 14pt; } +h2 { font-size: 12pt; } +table { font-size:9pt } +table { border-spacing: 0px; border: 1px solid black } +th, table thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + font-weight: bold; font-family: Verdana; + white-space:nowrap; +} +.W { font-size:0px } +th, td { padding:5px; padding-left:8px; text-align:left } +td.SUMM_DESC { padding-left:12px } +td.DESC { white-space:pre } +td.Q { text-align:right } +td { text-align:left } +tbody.scrollContent { overflow:auto } + +table.form_group { + background-color: #ccc; + border: 1px solid #333; + padding: 2px; +} + +table.form_inner_group { + background-color: #ccc; + border: 1px solid #333; + padding: 0px; +} + +table.form { + background-color: #999; + border: 1px solid #333; + padding: 2px; +} + +td.form_label { + text-align: right; + vertical-align: top; +} +/* For one line entires */ +td.form_clabel { + text-align: right; + vertical-align: center; +} +td.form_value { + text-align: left; + vertical-align: top; +} +td.form_submit { + text-align: right; + vertical-align: top; +} + +h1.SubmitFail { + color: #f00; +} +h1.SubmitOk { +} diff --git a/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/sorttable.js b/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/sorttable.js new file mode 100644 index 0000000..32faa07 --- /dev/null +++ b/2021-05-29-193455-5826-1@8f5bcb5e8b30_master/sorttable.js @@ -0,0 +1,492 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backward compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + //row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[�$�]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; diff --git a/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/0.html b/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/0.html new file mode 100644 index 0000000..1dd5b39 --- /dev/null +++ b/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/0.html @@ -0,0 +1,849 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos pre { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } +span.linenos { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } +td.linenos pre.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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 - caja-dropbox: src/caja-dropbox-hooks.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> caja-dropbox-hooks.c</p> +<a href="0.html#line-69"> uninitvar 69</a><a href="0.html#line-80"> uninitvar 80</a><a href="0.html#line-86"> uninitvar 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 + 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</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/*</span> +<a name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * caja-dropbox-hooks.c</span> +<a name="line-5"></a><span class="cm"> * Implements connection handling and C interface for the Dropbox hook socket.</span> +<a name="line-6"></a><span class="cm"> *</span> +<a name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a name="line-8"></a><span class="cm"> *</span> +<a name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a name="line-13"></a><span class="cm"> *</span> +<a name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a name="line-18"></a><span class="cm"> *</span> +<a name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a name="line-21"></a><span class="cm"> *</span> +<a name="line-22"></a><span class="cm"> */</span> +<a name="line-23"></a> +<a name="line-24"></a><span class="cp">#include</span> <span class="cpf"><sys/types.h></span><span class="cp"></span> +<a name="line-25"></a><span class="cp">#include</span> <span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a name="line-26"></a><span class="cp">#include</span> <span class="cpf"><sys/un.h></span><span class="cp"></span> +<a name="line-27"></a><span class="cp">#include</span> <span class="cpf"><errno.h></span><span class="cp"></span> +<a name="line-28"></a><span class="cp">#include</span> <span class="cpf"><unistd.h></span><span class="cp"></span> +<a name="line-29"></a><span class="cp">#include</span> <span class="cpf"><fcntl.h></span><span class="cp"></span> +<a name="line-30"></a> +<a name="line-31"></a><span class="cp">#include</span> <span class="cpf"><string.h></span><span class="cp"></span> +<a name="line-32"></a> +<a name="line-33"></a><span class="cp">#include</span> <span class="cpf"><glib.h></span><span class="cp"></span> +<a name="line-34"></a> +<a name="line-35"></a><span class="cp">#include</span> <span class="cpf">"g-util.h"</span><span class="cp"></span> +<a name="line-36"></a><span class="cp">#include</span> <span class="cpf">"async-io-coroutine.h"</span><span class="cp"></span> +<a name="line-37"></a><span class="cp">#include</span> <span class="cpf">"dropbox-client-util.h"</span><span class="cp"></span> +<a name="line-38"></a><span class="cp">#include</span> <span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a name="line-39"></a> +<a name="line-40"></a><span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span> +<a name="line-41"></a> <span class="n">DropboxUpdateHook</span> <span class="n">hook</span><span class="p">;</span> +<a name="line-42"></a> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-43"></a><span class="p">}</span> <span class="n">HookData</span><span class="p">;</span> +<a name="line-44"></a> +<a name="line-45"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-46"></a><span class="n">try_to_connect</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">);</span> +<a name="line-47"></a> +<a name="line-48"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-49"></a><span class="n">handle_hook_server_input</span><span class="p">(</span><span class="n">GIOChannel</span> <span class="o">*</span><span class="n">chan</span><span class="p">,</span> +<a name="line-50"></a> <span class="n">GIOCondition</span> <span class="n">cond</span><span class="p">,</span> +<a name="line-51"></a> <span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-52"></a> <span class="cm">/*debug_enter(); */</span> +<a name="line-53"></a> +<a name="line-54"></a> <span class="cm">/* we have some sweet macros defined that allow us to write this</span> +<a name="line-55"></a><span class="cm"> async event handler like a microthread yeahh, watch out for context */</span> +<a name="line-56"></a> <span class="n">CRBEGIN</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span><span class="p">);</span> +<a name="line-57"></a> <span class="k">while</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-58"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span> <span class="o">=</span> +<a name="line-59"></a> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-60"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-61"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-62"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_strfreev</span><span class="p">);</span> +<a name="line-63"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-64"></a> +<a name="line-65"></a> <span class="cm">/* read the command name */</span> +<a name="line-66"></a> <span class="p">{</span> +<a name="line-67"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">line</span><span class="p">;</span> +<a name="line-68"></a> <span class="n">CRREADLINE</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span><span class="p">,</span> <span class="n">chan</span><span class="p">,</span> <span class="n">line</span><span class="p">);</span> +<a name="line-69"></a><span class="hll"> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span> <span class="o">=</span> <span class="n">dropbox_client_util_desanitize</span><span class="p">(</span><span class="n">line</span><span class="p">);</span><span class="error2"><--- Uninitialized variable: line</span> +</span><a name="line-70"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">line</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="cm">/*debug("got a hook name: %s", hookserv->hhsi.command_name); */</span> +<a name="line-74"></a> +<a name="line-75"></a> <span class="cm">/* now read each arg line (until a certain limit) until we receive "done" */</span> +<a name="line-76"></a> <span class="k">while</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-77"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">line</span><span class="p">;</span> +<a name="line-78"></a> +<a name="line-79"></a> <span class="cm">/* if too many arguments, this connection seems malicious */</span> +<a name="line-80"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span> <span class="o">>=</span> <span class="mi">20</span><span class="p">)</span> <span class="p">{</span><span class="error2"><--- Assuming condition is false</span> +</span><a name="line-81"></a> <span class="n">CRHALT</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="n">CRREADLINE</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span><span class="p">,</span> <span class="n">chan</span><span class="p">,</span> <span class="n">line</span><span class="p">);</span> +<a name="line-85"></a> +<a name="line-86"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"done"</span><span class="p">,</span> <span class="n">line</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span><span class="error2"><--- Uninitialized variable: line</span> +</span><a name="line-87"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a name="line-88"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-89"></a> <span class="p">}</span> +<a name="line-90"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-91"></a> <span class="n">gboolean</span> <span class="n">parse_result</span><span class="p">;</span> +<a name="line-92"></a> +<a name="line-93"></a> <span class="n">parse_result</span> <span class="o">=</span> +<a name="line-94"></a> <span class="n">dropbox_client_util_command_parse_arg</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> +<a name="line-95"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">);</span> +<a name="line-96"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a name="line-97"></a> +<a name="line-98"></a> <span class="k">if</span> <span class="p">(</span><span class="n">FALSE</span> <span class="o">==</span> <span class="n">parse_result</span><span class="p">)</span> <span class="p">{</span> +<a name="line-99"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"bad parse"</span><span class="p">);</span> +<a name="line-100"></a> <span class="n">CRHALT</span><span class="p">;</span> +<a name="line-101"></a> <span class="p">}</span> +<a name="line-102"></a> <span class="p">}</span> +<a name="line-103"></a> +<a name="line-104"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-105"></a> <span class="p">}</span> +<a name="line-106"></a> +<a name="line-107"></a> <span class="p">{</span> +<a name="line-108"></a> <span class="n">HookData</span> <span class="o">*</span><span class="n">hd</span><span class="p">;</span> +<a name="line-109"></a> <span class="n">hd</span> <span class="o">=</span> <span class="p">(</span><span class="n">HookData</span> <span class="o">*</span><span class="p">)</span> +<a name="line-110"></a> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">dispatch_table</span><span class="p">,</span> +<a name="line-111"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="p">);</span> +<a name="line-112"></a> <span class="k">if</span> <span class="p">(</span><span class="n">hd</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-113"></a> <span class="p">(</span><span class="n">hd</span><span class="o">-></span><span class="n">hook</span><span class="p">)(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">,</span> <span class="n">hd</span><span class="o">-></span><span class="n">ud</span><span class="p">);</span> +<a name="line-114"></a> <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="n">g_free</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="p">);</span> +<a name="line-118"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">);</span> +<a name="line-119"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-120"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-121"></a> <span class="p">}</span> +<a name="line-122"></a> <span class="n">CREND</span><span class="p">;</span> +<a name="line-123"></a><span class="p">}</span> +<a name="line-124"></a> +<a name="line-125"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-126"></a><span class="n">watch_killer</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-127"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"hook client disconnected"</span><span class="p">);</span> +<a name="line-128"></a> +<a name="line-129"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-130"></a> +<a name="line-131"></a> <span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-132"></a> +<a name="line-133"></a> <span class="cm">/* we basically just have to free the memory allocated in the</span> +<a name="line-134"></a><span class="cm"> handle_hook_server_init ctx */</span> +<a name="line-135"></a> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-136"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="p">);</span> +<a name="line-137"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-138"></a> <span class="p">}</span> +<a name="line-139"></a> +<a name="line-140"></a> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-141"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">);</span> +<a name="line-142"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-143"></a> <span class="p">}</span> +<a name="line-144"></a> +<a name="line-145"></a> <span class="n">g_io_channel_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">);</span> +<a name="line-146"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-147"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-148"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-149"></a> +<a name="line-150"></a> <span class="cm">/* lol we also have to start a new connection */</span> +<a name="line-151"></a> <span class="n">try_to_connect</span><span class="p">(</span><span class="n">hookserv</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="k">static</span> <span class="n">gboolean</span> +<a name="line-155"></a><span class="n">try_to_connect</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-156"></a> <span class="cm">/* create socket */</span> +<a name="line-157"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span> <span class="o">=</span> <span class="n">socket</span><span class="p">(</span><span class="n">PF_UNIX</span><span class="p">,</span> <span class="n">SOCK_STREAM</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-158"></a> +<a name="line-159"></a> <span class="cm">/* set native non-blocking, for connect timeout */</span> +<a name="line-160"></a> <span class="p">{</span> +<a name="line-161"></a> <span class="kt">int</span> <span class="n">flags</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">flags</span> <span class="o">=</span> <span class="n">fcntl</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span> <span class="n">F_GETFL</span><span class="p">,</span> <span class="mi">0</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-164"></a> <span class="k">goto</span> <span class="n">FAIL_CLEANUP</span><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">if</span> <span class="p">(</span><span class="n">fcntl</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span> <span class="n">F_SETFL</span><span class="p">,</span> <span class="n">flags</span> <span class="o">|</span> <span class="n">O_NONBLOCK</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-168"></a> <span class="k">goto</span> <span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a name="line-169"></a> <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="cm">/* connect to server, might fail of course */</span> +<a name="line-173"></a> <span class="p">{</span> +<a name="line-174"></a> <span class="k">struct</span> <span class="nc">sockaddr_un</span> <span class="n">addr</span><span class="p">;</span> +<a name="line-175"></a> <span class="kt">socklen_t</span> <span class="n">addr_len</span><span class="p">;</span> +<a name="line-176"></a> +<a name="line-177"></a> <span class="cm">/* intialize address structure */</span> +<a name="line-178"></a> <span class="n">addr</span><span class="p">.</span><span class="n">sun_family</span> <span class="o">=</span> <span class="n">AF_UNIX</span><span class="p">;</span> +<a name="line-179"></a> <span class="n">g_snprintf</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">,</span> +<a name="line-180"></a> <span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">),</span> +<a name="line-181"></a> <span class="s">"%s/.dropbox/iface_socket"</span><span class="p">,</span> +<a name="line-182"></a> <span class="n">g_get_home_dir</span><span class="p">());</span> +<a name="line-183"></a> <span class="n">addr_len</span> <span class="o">=</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span> <span class="o">-</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">)</span> <span class="o">+</span> <span class="n">strlen</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">);</span> +<a name="line-184"></a> +<a name="line-185"></a> <span class="cm">/* if there was an error we have to try again later */</span> +<a name="line-186"></a> <span class="k">if</span> <span class="p">(</span><span class="n">connect</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span> <span class="p">(</span><span class="k">struct</span> <span class="nc">sockaddr</span> <span class="o">*</span><span class="p">)</span> <span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">addr_len</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-187"></a> <span class="k">if</span> <span class="p">(</span><span class="n">errno</span> <span class="o">==</span> <span class="n">EINPROGRESS</span><span class="p">)</span> <span class="p">{</span> +<a name="line-188"></a> <span class="n">fd_set</span> <span class="n">writers</span><span class="p">;</span> +<a name="line-189"></a> <span class="k">struct</span> <span class="nc">timeval</span> <span class="n">tv</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">};</span> +<a name="line-190"></a> <span class="n">FD_ZERO</span><span class="p">(</span><span class="o">&</span><span class="n">writers</span><span class="p">);</span> +<a name="line-191"></a> <span class="n">FD_SET</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span> <span class="o">&</span><span class="n">writers</span><span class="p">);</span> +<a name="line-192"></a> +<a name="line-193"></a> <span class="cm">/* if nothing was ready after 3 seconds, fail out homie */</span> +<a name="line-194"></a> <span class="k">if</span> <span class="p">(</span><span class="n">select</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</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="o">&</span><span class="n">writers</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="o">&</span><span class="n">tv</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-195"></a> <span class="k">goto</span> <span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a name="line-196"></a> <span class="p">}</span> +<a name="line-197"></a> +<a name="line-198"></a> <span class="k">if</span> <span class="p">(</span><span class="n">connect</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span> <span class="p">(</span><span class="k">struct</span> <span class="nc">sockaddr</span> <span class="o">*</span><span class="p">)</span> <span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">addr_len</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-199"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"couldn't connect to hook server after 1 second"</span><span class="p">);</span> +<a name="line-200"></a> <span class="k">goto</span> <span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a name="line-201"></a> <span class="p">}</span> +<a name="line-202"></a> <span class="p">}</span> +<a name="line-203"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-204"></a> <span class="k">goto</span> <span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a name="line-205"></a> <span class="p">}</span> +<a name="line-206"></a> <span class="p">}</span> +<a name="line-207"></a> <span class="p">}</span> +<a name="line-208"></a> +<a name="line-209"></a> <span class="cm">/* lol sometimes i write funny codez */</span> +<a name="line-210"></a> <span class="k">if</span> <span class="p">(</span><span class="n">FALSE</span><span class="p">)</span> <span class="p">{</span> +<a name="line-211"></a> <span class="nl">FAIL_CLEANUP</span><span class="p">:</span> +<a name="line-212"></a> <span class="n">close</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">);</span> +<a name="line-213"></a> <span class="n">g_timeout_add_seconds</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">try_to_connect</span><span class="p">,</span> <span class="n">hookserv</span><span class="p">);</span> +<a name="line-214"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-215"></a> <span class="p">}</span> +<a name="line-216"></a> +<a name="line-217"></a> <span class="cm">/* great we connected!, let's create the channel and wait on it */</span> +<a name="line-218"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span> <span class="o">=</span> <span class="n">g_io_channel_unix_new</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">);</span> +<a name="line-219"></a> <span class="n">g_io_channel_set_line_term</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="mi">-1</span><span class="p">);</span> +<a name="line-220"></a> <span class="n">g_io_channel_set_close_on_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-221"></a> +<a name="line-222"></a> <span class="cm">/*debug("create channel"); */</span> +<a name="line-223"></a> +<a name="line-224"></a> <span class="cm">/* Set non-blocking ;) (again just in case) */</span> +<a name="line-225"></a> <span class="p">{</span> +<a name="line-226"></a> <span class="n">GIOFlags</span> <span class="n">flags</span><span class="p">;</span> +<a name="line-227"></a> <span class="n">GIOStatus</span> <span class="n">iostat</span><span class="p">;</span> +<a name="line-228"></a> +<a name="line-229"></a> <span class="n">flags</span> <span class="o">=</span> <span class="n">g_io_channel_get_flags</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">);</span> +<a name="line-230"></a> <span class="n">iostat</span> <span class="o">=</span> <span class="n">g_io_channel_set_flags</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span> <span class="n">flags</span> <span class="o">|</span> <span class="n">G_IO_FLAG_NONBLOCK</span><span class="p">,</span> +<a name="line-231"></a> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-232"></a> <span class="k">if</span> <span class="p">(</span><span class="n">iostat</span> <span class="o">==</span> <span class="n">G_IO_STATUS_ERROR</span><span class="p">)</span> <span class="p">{</span> +<a name="line-233"></a> <span class="n">g_io_channel_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">);</span> +<a name="line-234"></a> <span class="n">g_timeout_add_seconds</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">try_to_connect</span><span class="p">,</span> <span class="n">hookserv</span><span class="p">);</span> +<a name="line-235"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-236"></a> <span class="p">}</span> +<a name="line-237"></a> <span class="p">}</span> +<a name="line-238"></a> +<a name="line-239"></a> <span class="cm">/*debug("set non blocking"); */</span> +<a name="line-240"></a> +<a name="line-241"></a> <span class="cm">/* this is fun, async io watcher */</span> +<a name="line-242"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-243"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-244"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-245"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span> <span class="o">=</span> +<a name="line-246"></a> <span class="n">g_io_add_watch_full</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span> <span class="n">G_PRIORITY_DEFAULT</span><span class="p">,</span> +<a name="line-247"></a> <span class="n">G_IO_IN</span> <span class="o">|</span> <span class="n">G_IO_PRI</span> <span class="o">|</span> <span class="n">G_IO_ERR</span> <span class="o">|</span> <span class="n">G_IO_HUP</span> <span class="o">|</span> <span class="n">G_IO_NVAL</span><span class="p">,</span> +<a name="line-248"></a> <span class="p">(</span><span class="n">GIOFunc</span><span class="p">)</span> <span class="n">handle_hook_server_input</span><span class="p">,</span> <span class="n">hookserv</span><span class="p">,</span> +<a name="line-249"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">watch_killer</span><span class="p">);</span> +<a name="line-250"></a> +<a name="line-251"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"hook client connected"</span><span class="p">);</span> +<a name="line-252"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-253"></a> <span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-254"></a> +<a name="line-255"></a> <span class="cm">/*debug("added watch");*/</span> +<a name="line-256"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-257"></a><span class="p">}</span> +<a name="line-258"></a> +<a name="line-259"></a><span class="cm">/* should only be called in glib main loop */</span> +<a name="line-260"></a><span class="cm">/* returns a gboolean because it is a GSourceFunc */</span> +<a name="line-261"></a><span class="n">gboolean</span> <span class="n">caja_dropbox_hooks_force_reconnect</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-262"></a> <span class="n">debug_enter</span><span class="p">();</span> +<a name="line-263"></a> +<a name="line-264"></a> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span> <span class="o">==</span> <span class="n">FALSE</span><span class="p">)</span> <span class="p">{</span> +<a name="line-265"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-266"></a> <span class="p">}</span> +<a name="line-267"></a> +<a name="line-268"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"forcing hook to reconnect"</span><span class="p">);</span> +<a name="line-269"></a> +<a name="line-270"></a> <span class="n">g_assert</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-271"></a> +<a name="line-272"></a> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-273"></a> <span class="n">g_source_remove</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span><span class="p">);</span> +<a name="line-274"></a> <span class="p">}</span> +<a name="line-275"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-276"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"event source was zero!!!!!"</span><span class="p">);</span> +<a name="line-277"></a> <span class="p">}</span> +<a name="line-278"></a> +<a name="line-279"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-280"></a><span class="p">}</span> +<a name="line-281"></a> +<a name="line-282"></a><span class="n">gboolean</span> +<a name="line-283"></a><span class="n">caja_dropbox_hooks_is_connected</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-284"></a> <span class="k">return</span> <span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span><span class="p">;</span> +<a name="line-285"></a><span class="p">}</span> +<a name="line-286"></a> +<a name="line-287"></a><span class="kt">void</span> +<a name="line-288"></a><span class="n">caja_dropbox_hooks_setup</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-289"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">dispatch_table</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-290"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-291"></a> <span class="n">g_free</span><span class="p">,</span> <span class="n">g_free</span><span class="p">);</span> +<a name="line-292"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-293"></a> +<a name="line-294"></a> <span class="n">g_hook_list_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">GHook</span><span class="p">));</span> +<a name="line-295"></a> <span class="n">g_hook_list_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">GHook</span><span class="p">));</span> +<a name="line-296"></a><span class="p">}</span> +<a name="line-297"></a> +<a name="line-298"></a><span class="kt">void</span> +<a name="line-299"></a><span class="n">caja_dropbox_hooks_add_on_disconnect_hook</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">,</span> +<a name="line-300"></a> <span class="n">DropboxHookClientConnectHook</span> <span class="n">dhcch</span><span class="p">,</span> +<a name="line-301"></a> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">)</span> <span class="p">{</span> +<a name="line-302"></a> <span class="n">GHook</span> <span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a name="line-303"></a> +<a name="line-304"></a> <span class="n">newhook</span> <span class="o">=</span> <span class="n">g_hook_alloc</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">));</span> +<a name="line-305"></a> <span class="n">newhook</span><span class="o">-></span><span class="n">func</span> <span class="o">=</span> <span class="n">dhcch</span><span class="p">;</span> +<a name="line-306"></a> <span class="n">newhook</span><span class="o">-></span><span class="n">data</span> <span class="o">=</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-307"></a> +<a name="line-308"></a> <span class="n">g_hook_append</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span> <span class="n">newhook</span><span class="p">);</span> +<a name="line-309"></a><span class="p">}</span> +<a name="line-310"></a> +<a name="line-311"></a><span class="kt">void</span> +<a name="line-312"></a><span class="n">caja_dropbox_hooks_add_on_connect_hook</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">,</span> +<a name="line-313"></a> <span class="n">DropboxHookClientConnectHook</span> <span class="n">dhcch</span><span class="p">,</span> +<a name="line-314"></a> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">)</span> <span class="p">{</span> +<a name="line-315"></a> <span class="n">GHook</span> <span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a name="line-316"></a> +<a name="line-317"></a> <span class="n">newhook</span> <span class="o">=</span> <span class="n">g_hook_alloc</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">));</span> +<a name="line-318"></a> <span class="n">newhook</span><span class="o">-></span><span class="n">func</span> <span class="o">=</span> <span class="n">dhcch</span><span class="p">;</span> +<a name="line-319"></a> <span class="n">newhook</span><span class="o">-></span><span class="n">data</span> <span class="o">=</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-320"></a> +<a name="line-321"></a> <span class="n">g_hook_append</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span> <span class="n">newhook</span><span class="p">);</span> +<a name="line-322"></a><span class="p">}</span> +<a name="line-323"></a> +<a name="line-324"></a><span class="kt">void</span> <span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">ndhs</span><span class="p">,</span> +<a name="line-325"></a> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">hook_name</span><span class="p">,</span> +<a name="line-326"></a> <span class="n">DropboxUpdateHook</span> <span class="n">hook</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">)</span> <span class="p">{</span> +<a name="line-327"></a> <span class="n">HookData</span> <span class="o">*</span><span class="n">hd</span><span class="p">;</span> +<a name="line-328"></a> <span class="n">hd</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">HookData</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-329"></a> <span class="n">hd</span><span class="o">-></span><span class="n">hook</span> <span class="o">=</span> <span class="n">hook</span><span class="p">;</span> +<a name="line-330"></a> <span class="n">hd</span><span class="o">-></span><span class="n">ud</span> <span class="o">=</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-331"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">ndhs</span><span class="o">-></span><span class="n">dispatch_table</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">hook_name</span><span class="p">),</span> <span class="n">hd</span><span class="p">);</span> +<a name="line-332"></a><span class="p">}</span> +<a name="line-333"></a> +<a name="line-334"></a><span class="kt">void</span> +<a name="line-335"></a><span class="n">caja_dropbox_hooks_start</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-336"></a> <span class="n">try_to_connect</span><span class="p">(</span><span class="n">hookserv</span><span class="p">);</span> +<a name="line-337"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/1.html b/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/1.html new file mode 100644 index 0000000..9978714 --- /dev/null +++ b/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/1.html @@ -0,0 +1,2169 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos pre { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } +span.linenos { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } +td.linenos pre.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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 - caja-dropbox: src/caja-dropbox.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> caja-dropbox.c</p> +<a href="1.html#line-312"> variableScope 312</a><a href="1.html#line-748"> knownConditionTrueFalse 748</a><a href="1.html#line-752"> variableScope 752</a><a href="1.html#line-756"> knownConditionTrueFalse 756</a><a href="1.html#line-847"> varFuncNullUB 847</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</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/*</span> +<a name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * caja-dropbox.c</span> +<a name="line-5"></a><span class="cm"> * Implements the Caja extension API for Dropbox.</span> +<a name="line-6"></a><span class="cm"> *</span> +<a name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a name="line-8"></a><span class="cm"> *</span> +<a name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a name="line-13"></a><span class="cm"> *</span> +<a name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a name="line-18"></a><span class="cm"> *</span> +<a name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a name="line-21"></a><span class="cm"> *</span> +<a name="line-22"></a><span class="cm"> */</span> +<a name="line-23"></a> +<a name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a name="line-25"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="cp"></span> +<a name="line-26"></a><span class="cp">#endif</span> +<a name="line-27"></a> +<a name="line-28"></a><span class="cp">#include</span> <span class="cpf"><sys/types.h></span><span class="cp"></span> +<a name="line-29"></a><span class="cp">#include</span> <span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a name="line-30"></a><span class="cp">#include</span> <span class="cpf"><sys/un.h></span><span class="cp"></span> +<a name="line-31"></a><span class="cp">#include</span> <span class="cpf"><errno.h></span><span class="cp"></span> +<a name="line-32"></a><span class="cp">#include</span> <span class="cpf"><unistd.h></span><span class="cp"></span> +<a name="line-33"></a><span class="cp">#include</span> <span class="cpf"><ctype.h></span><span class="cp"></span> +<a name="line-34"></a> +<a name="line-35"></a><span class="cp">#include</span> <span class="cpf"><glib.h></span><span class="cp"></span> +<a name="line-36"></a><span class="cp">#include</span> <span class="cpf"><glib/gprintf.h></span><span class="cp"></span> +<a name="line-37"></a><span class="cp">#include</span> <span class="cpf"><glib-object.h></span><span class="cp"></span> +<a name="line-38"></a><span class="cp">#include</span> <span class="cpf"><gtk/gtk.h></span><span class="cp"></span> +<a name="line-39"></a> +<a name="line-40"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-extension-types.h></span><span class="cp"></span> +<a name="line-41"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-menu-provider.h></span><span class="cp"></span> +<a name="line-42"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="cp"></span> +<a name="line-43"></a> +<a name="line-44"></a><span class="cp">#include</span> <span class="cpf">"g-util.h"</span><span class="cp"></span> +<a name="line-45"></a><span class="cp">#include</span> <span class="cpf">"dropbox-command-client.h"</span><span class="cp"></span> +<a name="line-46"></a><span class="cp">#include</span> <span class="cpf">"caja-dropbox.h"</span><span class="cp"></span> +<a name="line-47"></a><span class="cp">#include</span> <span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a name="line-48"></a> +<a name="line-49"></a><span class="k">static</span> <span class="kt">char</span> <span class="o">*</span><span class="n">emblems</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span><span class="s">"dropbox-uptodate"</span><span class="p">,</span> <span class="s">"dropbox-syncing"</span><span class="p">,</span> <span class="s">"dropbox-unsyncable"</span><span class="p">};</span> +<a name="line-50"></a><span class="n">gchar</span> <span class="o">*</span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="n">EMBLEMDIR</span> <span class="p">,</span> <span class="nb">NULL</span> <span class="p">};</span> +<a name="line-51"></a> +<a name="line-52"></a><span class="n">gboolean</span> <span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span> +<a name="line-53"></a> +<a name="line-54"></a><span class="k">static</span> <span class="n">GType</span> <span class="n">dropbox_type</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-55"></a> +<a name="line-56"></a><span class="cm">/*</span> +<a name="line-57"></a><span class="cm"> Simplifies a path by removing navigation elements such as '.' and '..'</span> +<a name="line-58"></a> +<a name="line-59"></a><span class="cm"> Arguments:</span> +<a name="line-60"></a><span class="cm"> - path: input path to be canonicalized</span> +<a name="line-61"></a> +<a name="line-62"></a><span class="cm"> Returns:</span> +<a name="line-63"></a><span class="cm"> Canonicalized path if input path is valid.</span> +<a name="line-64"></a><span class="cm"> NULL otherwise.</span> +<a name="line-65"></a><span class="cm">*/</span> +<a name="line-66"></a><span class="k">static</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-67"></a><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">path</span><span class="p">)</span> <span class="p">{</span> +<a name="line-68"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-69"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-70"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">cpy</span><span class="p">,</span> <span class="o">**</span><span class="n">elts</span><span class="p">;</span> +<a name="line-71"></a> +<a name="line-72"></a> <span class="n">g_assert</span><span class="p">(</span><span class="n">path</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-73"></a> <span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'/'</span><span class="p">);</span> +<a name="line-74"></a> +<a name="line-75"></a> <span class="n">elts</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s">"/"</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-76"></a> <span class="n">cpy</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="n">g_strv_length</span><span class="p">(</span><span class="n">elts</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span> +<a name="line-77"></a> <span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="s">"/"</span><span class="p">;</span> +<a name="line-78"></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">elts</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-79"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">".."</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-80"></a> <span class="k">if</span> <span class="p">(</span><span class="n">j</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-81"></a> <span class="n">j</span><span class="o">--</span><span class="p">;</span> +<a name="line-82"></a> <span class="p">}</span> +<a name="line-83"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-84"></a> <span class="c1">// Input path has too many parent directory references and is invalid</span> +<a name="line-85"></a> <span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-86"></a> <span class="k">goto</span> <span class="n">exit</span><span class="p">;</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">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">"."</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-90"></a> <span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a name="line-91"></a> <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">cpy</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-95"></a> <span class="n">toret</span> <span class="o">=</span> <span class="n">g_build_filenamev</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span> +<a name="line-96"></a> +<a name="line-97"></a><span class="nl">exit</span><span class="p">:</span> +<a name="line-98"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span> +<a name="line-99"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">elts</span><span class="p">);</span> +<a name="line-100"></a> +<a name="line-101"></a> <span class="k">return</span> <span class="n">toret</span><span class="p">;</span> +<a name="line-102"></a><span class="p">}</span> +<a name="line-103"></a> +<a name="line-104"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-105"></a><span class="n">reset_file</span><span class="p">(</span><span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">)</span> <span class="p">{</span> +<a name="line-106"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"resetting file %p"</span><span class="p">,</span> <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)</span> <span class="n">file</span><span class="p">);</span> +<a name="line-107"></a> <span class="n">caja_file_info_invalidate_extension_info</span><span class="p">(</span><span class="n">file</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">static</span> <span class="n">gboolean</span> +<a name="line-111"></a><span class="n">reset_all_files</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-112"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a name="line-113"></a> +<a name="line-114"></a> <span class="cm">/* this works because you can call a function pointer with</span> +<a name="line-115"></a><span class="cm"> more arguments than it takes */</span> +<a name="line-116"></a> <span class="n">g_hash_table_foreach</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="p">(</span><span class="n">GHFunc</span><span class="p">)</span> <span class="n">reset_file</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-117"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-118"></a><span class="p">}</span> +<a name="line-119"></a> +<a name="line-120"></a> +<a name="line-121"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-122"></a><span class="n">when_file_dies</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">,</span> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">address</span><span class="p">)</span> <span class="p">{</span> +<a name="line-123"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a name="line-124"></a> +<a name="line-125"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> +<a name="line-126"></a> +<a name="line-127"></a> <span class="cm">/* we never got a change to view this file */</span> +<a name="line-128"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-129"></a> <span class="k">return</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="cm">/* too chatty */</span> +<a name="line-133"></a> <span class="cm">/* debug("removing %s <-> 0x%p", filename, address); */</span> +<a name="line-134"></a> +<a name="line-135"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-136"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> +<a name="line-137"></a><span class="p">}</span> +<a name="line-138"></a> +<a name="line-139"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-140"></a><span class="n">changed_cb</span><span class="p">(</span><span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-141"></a> <span class="cm">/* check if this file's path has changed, if so update the hash and invalidate</span> +<a name="line-142"></a><span class="cm"> the file */</span> +<a name="line-143"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">,</span> <span class="o">*</span><span class="n">pfilename</span><span class="p">;</span> +<a name="line-144"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename2</span><span class="p">;</span> +<a name="line-145"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a name="line-146"></a> +<a name="line-147"></a> <span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-148"></a> <span class="n">pfilename</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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-149"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">pfilename</span> <span class="o">?</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">)</span> <span class="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-150"></a> +<a name="line-151"></a> <span class="cm">/* Canonicalization will only null-out a non-null filename if it is invalid */</span> +<a name="line-152"></a> <span class="n">g_assert</span><span class="p">((</span><span class="n">pfilename</span> <span class="o">==</span> <span class="nb">NULL</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="o">||</span> <span class="p">(</span><span class="n">pfilename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">filename</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">));</span> +<a name="line-153"></a> +<a name="line-154"></a> <span class="n">filename2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-155"></a> +<a name="line-156"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a name="line-157"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-158"></a> +<a name="line-159"></a> <span class="cm">/* if filename2 is NULL we've never seen this file in update_file_info */</span> +<a name="line-160"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename2</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-161"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-162"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-163"></a> <span class="p">}</span> +<a name="line-164"></a> +<a name="line-165"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-166"></a> <span class="cm">/* A file has moved to offline storage. Lets remove it from our tables. */</span> +<a name="line-167"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-168"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename2</span><span class="p">);</span> +<a name="line-169"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-170"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-171"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-172"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-173"></a> <span class="p">}</span> +<a name="line-174"></a> +<a name="line-175"></a> <span class="cm">/* this is a hack, because caja doesn't do this for us, for some reason</span> +<a name="line-176"></a><span class="cm"> the file's path has changed */</span> +<a name="line-177"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">filename2</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-178"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"shifty old: %s, new %s"</span><span class="p">,</span> <span class="n">filename2</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-179"></a> +<a name="line-180"></a> <span class="cm">/* gotta do this first, the call after this frees filename2 */</span> +<a name="line-181"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename2</span><span class="p">);</span> +<a name="line-182"></a> +<a name="line-183"></a> <span class="n">g_hash_table_replace</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span> +<a name="line-184"></a> +<a name="line-185"></a> <span class="p">{</span> +<a name="line-186"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">f2</span><span class="p">;</span> +<a name="line-187"></a> <span class="cm">/* we shouldn't have another mapping from filename to an object */</span> +<a name="line-188"></a> <span class="n">f2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-189"></a> <span class="k">if</span> <span class="p">(</span><span class="n">f2</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-190"></a> <span class="cm">/* lets fix it if it's true, just remove the mapping */</span> +<a name="line-191"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-192"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">f2</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="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="n">file</span><span class="p">);</span> +<a name="line-197"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</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="n">g_free</span><span class="p">(</span><span class="n">filename</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="k">static</span> <span class="n">CajaOperationResult</span> +<a name="line-204"></a><span class="n">caja_dropbox_update_file_info</span><span class="p">(</span><span class="n">CajaInfoProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-205"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> +<a name="line-206"></a> <span class="n">GClosure</span> <span class="o">*</span><span class="n">update_complete</span><span class="p">,</span> +<a name="line-207"></a> <span class="n">CajaOperationHandle</span> <span class="o">**</span><span class="n">handle</span><span class="p">)</span> <span class="p">{</span> +<a name="line-208"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">;</span> +<a name="line-209"></a> +<a name="line-210"></a> <span class="n">cvs</span> <span class="o">=</span> <span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span> +<a name="line-211"></a> +<a name="line-212"></a> <span class="cm">/* this code adds this file object to our two-way hash of file objects</span> +<a name="line-213"></a><span class="cm"> so we can shell touch these files later */</span> +<a name="line-214"></a> <span class="p">{</span> +<a name="line-215"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">pfilename</span><span class="p">,</span> <span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a name="line-216"></a> +<a name="line-217"></a> <span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-218"></a> <span class="n">pfilename</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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-219"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-220"></a> <span class="k">if</span> <span class="p">(</span><span class="n">pfilename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-221"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a name="line-222"></a> <span class="p">}</span> +<a name="line-223"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-224"></a> <span class="kt">int</span> <span class="n">cmp</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-225"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">stored_filename</span><span class="p">;</span> +<a name="line-226"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a name="line-227"></a> +<a name="line-228"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a name="line-229"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a name="line-230"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-231"></a> <span class="cm">/* pfilename path was invalid if canonicalize operation nulled it out */</span> +<a name="line-232"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span> +<a name="line-233"></a> <span class="p">}</span> +<a name="line-234"></a> <span class="n">stored_filename</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-235"></a> +<a name="line-236"></a> <span class="cm">/* don't worry about the dup checks, gcc is smart enough to optimize this</span> +<a name="line-237"></a><span class="cm"> GCSE ftw */</span> +<a name="line-238"></a> <span class="k">if</span> <span class="p">((</span><span class="n">stored_filename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="p">(</span><span class="n">cmp</span> <span class="o">=</span> <span class="n">strcmp</span><span class="p">(</span><span class="n">stored_filename</span><span class="p">,</span> <span class="n">filename</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">||</span> +<a name="line-239"></a> <span class="n">stored_filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <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">stored_filename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">cmp</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-242"></a> <span class="cm">/* this happens when the filename changes name on a file obj</span> +<a name="line-243"></a><span class="cm"> but changed_cb isn't called */</span> +<a name="line-244"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-245"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-246"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">stored_filename</span><span class="p">);</span> +<a name="line-247"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-248"></a> <span class="p">}</span> +<a name="line-249"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">stored_filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-250"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">f2</span><span class="p">;</span> +<a name="line-251"></a> +<a name="line-252"></a> <span class="k">if</span> <span class="p">((</span><span class="n">f2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-253"></a> <span class="cm">/* if the filename exists in the filename2obj hash</span> +<a name="line-254"></a><span class="cm"> but the file obj doesn't exist in the obj2filename hash:</span> +<a name="line-255"></a> +<a name="line-256"></a><span class="cm"> this happens when caja allocates another file object</span> +<a name="line-257"></a><span class="cm"> for a filename without first deleting the original file object</span> +<a name="line-258"></a> +<a name="line-259"></a><span class="cm"> just remove the association to the older file object, it's obsolete</span> +<a name="line-260"></a><span class="cm"> */</span> +<a name="line-261"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">f2</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-262"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">f2</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-263"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-264"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">f2</span><span class="p">);</span> +<a name="line-265"></a> <span class="p">}</span> +<a name="line-266"></a> <span class="p">}</span> +<a name="line-267"></a> +<a name="line-268"></a> <span class="cm">/* too chatty */</span> +<a name="line-269"></a> <span class="cm">/* debug("adding %s <-> 0x%p", filename, file);*/</span> +<a name="line-270"></a> <span class="n">g_object_weak_ref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-271"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="n">file</span><span class="p">);</span> +<a name="line-272"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span> +<a name="line-273"></a> <span class="n">g_signal_connect</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="s">"changed"</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-274"></a> <span class="p">}</span> +<a name="line-275"></a> +<a name="line-276"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-277"></a> <span class="p">}</span> +<a name="line-278"></a> <span class="p">}</span> +<a name="line-279"></a> +<a name="line-280"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">))</span> <span class="o">==</span> <span class="n">FALSE</span> <span class="o">||</span> +<a name="line-281"></a> <span class="n">caja_file_info_is_gone</span><span class="p">(</span><span class="n">file</span><span class="p">))</span> <span class="p">{</span> +<a name="line-282"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_COMPLETE</span><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="p">{</span> +<a name="line-286"></a> <span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="n">dfic</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-287"></a> +<a name="line-288"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-289"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">provider</span> <span class="o">=</span> <span class="n">provider</span><span class="p">;</span> +<a name="line-290"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GET_FILE_INFO</span><span class="p">;</span> +<a name="line-291"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span> <span class="o">=</span> <span class="n">g_closure_ref</span><span class="p">(</span><span class="n">update_complete</span><span class="p">);</span> +<a name="line-292"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">file</span> <span class="o">=</span> <span class="n">g_object_ref</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-293"></a> +<a name="line-294"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dfic</span><span class="p">);</span> +<a name="line-295"></a> +<a name="line-296"></a> <span class="o">*</span><span class="n">handle</span> <span class="o">=</span> <span class="p">(</span><span class="n">CajaOperationHandle</span> <span class="o">*</span><span class="p">)</span> <span class="n">dfic</span><span class="p">;</span> +<a name="line-297"></a> +<a name="line-298"></a> <span class="k">return</span> <span class="n">dropbox_use_operation_in_progress_workaround</span> +<a name="line-299"></a> <span class="o">?</span> <span class="nl">CAJA_OPERATION_COMPLETE</span> +<a name="line-300"></a> <span class="p">:</span> <span class="n">CAJA_OPERATION_IN_PROGRESS</span><span class="p">;</span> +<a name="line-301"></a> <span class="p">}</span> +<a name="line-302"></a><span class="p">}</span> +<a name="line-303"></a> +<a name="line-304"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-305"></a><span class="n">handle_shell_touch</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-306"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">path</span><span class="p">;</span> +<a name="line-307"></a> +<a name="line-308"></a> <span class="c1">// debug_enter();</span> +<a name="line-309"></a> +<a name="line-310"></a> <span class="k">if</span> <span class="p">((</span><span class="n">path</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="s">"path"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a name="line-311"></a> <span class="n">path</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="o">==</span> <span class="sc">'/'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-312"></a><span class="hll"> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'file' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-313"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a name="line-314"></a> +<a name="line-315"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> +<a name="line-316"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-317"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"shell touch for %s"</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-318"></a> +<a name="line-319"></a> <span class="n">file</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-320"></a> +<a name="line-321"></a> <span class="k">if</span> <span class="p">(</span><span class="n">file</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-322"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"gonna reset %s"</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-323"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-324"></a> <span class="p">}</span> +<a name="line-325"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-326"></a> <span class="p">}</span> +<a name="line-327"></a> <span class="p">}</span> +<a name="line-328"></a> +<a name="line-329"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-330"></a><span class="p">}</span> +<a name="line-331"></a> +<a name="line-332"></a><span class="n">gboolean</span> +<a name="line-333"></a><span class="n">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span> <span class="o">*</span><span class="n">dficr</span><span class="p">)</span> <span class="p">{</span> +<a name="line-334"></a> +<a name="line-335"></a> <span class="c1">//debug_enter();</span> +<a name="line-336"></a> <span class="n">CajaOperationResult</span> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span> +<a name="line-337"></a> +<a name="line-338"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="p">)</span> <span class="p">{</span> +<a name="line-339"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">status</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-340"></a> <span class="n">gboolean</span> <span class="n">isdir</span><span class="p">;</span> +<a name="line-341"></a> +<a name="line-342"></a> <span class="n">isdir</span> <span class="o">=</span> <span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">)</span> <span class="p">;</span> +<a name="line-343"></a> +<a name="line-344"></a> <span class="cm">/* if we have emblems just use them. */</span> +<a name="line-345"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a name="line-346"></a> <span class="p">(</span><span class="n">status</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">,</span> <span class="s">"emblems"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-347"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a name="line-348"></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">status</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-349"></a> <span class="k">if</span> <span class="p">(</span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> +<a name="line-350"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-351"></a> <span class="p">}</span> +<a name="line-352"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a name="line-353"></a> <span class="p">}</span> +<a name="line-354"></a> <span class="cm">/* if the file status command went okay */</span> +<a name="line-355"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a name="line-356"></a> <span class="p">(</span><span class="n">status</span> <span class="o">=</span> +<a name="line-357"></a> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">,</span> <span class="s">"status"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&&</span> +<a name="line-358"></a> <span class="p">((</span><span class="n">isdir</span> <span class="o">==</span> <span class="n">TRUE</span> <span class="o">&&</span> +<a name="line-359"></a> <span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">||</span> <span class="n">isdir</span> <span class="o">==</span> <span class="n">FALSE</span><span class="p">))</span> <span class="p">{</span> +<a name="line-360"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">tag</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-361"></a> +<a name="line-362"></a> <span class="cm">/* set the tag emblem */</span> +<a name="line-363"></a> <span class="k">if</span> <span class="p">(</span><span class="n">isdir</span> <span class="o">&&</span> +<a name="line-364"></a> <span class="p">(</span><span class="n">tag</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">,</span> <span class="s">"tag"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-365"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-366"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"web"</span><span class="p">);</span> +<a name="line-367"></a> <span class="p">}</span> +<a name="line-368"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"shared"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-369"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"people"</span><span class="p">);</span> +<a name="line-370"></a> <span class="p">}</span> +<a name="line-371"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"photos"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-372"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"photos"</span><span class="p">);</span> +<a name="line-373"></a> <span class="p">}</span> +<a name="line-374"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"sandbox"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-375"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"star"</span><span class="p">);</span> +<a name="line-376"></a> <span class="p">}</span> +<a name="line-377"></a> <span class="p">}</span> +<a name="line-378"></a> +<a name="line-379"></a> <span class="cm">/* set the status emblem */</span> +<a name="line-380"></a> <span class="p">{</span> +<a name="line-381"></a> <span class="kt">int</span> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-382"></a> +<a name="line-383"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"up to date"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</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-384"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-385"></a> <span class="p">}</span> +<a name="line-386"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"syncing"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</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-387"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span> +<a name="line-388"></a> <span class="p">}</span> +<a name="line-389"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"unsyncable"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</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-390"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span> +<a name="line-391"></a> <span class="p">}</span> +<a name="line-392"></a> +<a name="line-393"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_code</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-394"></a> <span class="cm">/*</span> +<a name="line-395"></a><span class="cm"> debug("%s to %s", emblems[emblem_code-1],</span> +<a name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr->dfic->file),</span> +<a name="line-397"></a><span class="cm"> NULL, NULL));</span> +<a name="line-398"></a><span class="cm"> */</span> +<a name="line-399"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="n">emblems</span><span class="p">[</span><span class="n">emblem_code</span><span class="mi">-1</span><span class="p">]);</span> +<a name="line-400"></a> <span class="p">}</span> +<a name="line-401"></a> <span class="p">}</span> +<a name="line-402"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a name="line-403"></a> <span class="p">}</span> +<a name="line-404"></a> <span class="p">}</span> +<a name="line-405"></a> +<a name="line-406"></a> <span class="cm">/* complete the info request */</span> +<a name="line-407"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">)</span> <span class="p">{</span> +<a name="line-408"></a> <span class="n">caja_info_provider_update_complete_invoke</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">,</span> +<a name="line-409"></a> <span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="p">,</span> +<a name="line-410"></a> <span class="p">(</span><span class="n">CajaOperationHandle</span><span class="o">*</span><span class="p">)</span> <span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">,</span> +<a name="line-411"></a> <span class="n">result</span><span class="p">);</span> +<a name="line-412"></a> <span class="p">}</span> +<a name="line-413"></a> +<a name="line-414"></a> <span class="cm">/* destroy the objects we created */</span> +<a name="line-415"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-416"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">);</span> +<a name="line-417"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-418"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">);</span> +<a name="line-419"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-420"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">);</span> +<a name="line-421"></a> +<a name="line-422"></a> <span class="cm">/* unref the objects we didn't create */</span> +<a name="line-423"></a> <span class="n">g_closure_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">);</span> +<a name="line-424"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span> +<a name="line-425"></a> +<a name="line-426"></a> <span class="cm">/* now free the structs */</span> +<a name="line-427"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">);</span> +<a name="line-428"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="p">);</span> +<a name="line-429"></a> +<a name="line-430"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-431"></a><span class="p">}</span> +<a name="line-432"></a> +<a name="line-433"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-434"></a><span class="n">caja_dropbox_cancel_update</span><span class="p">(</span><span class="n">CajaInfoProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-435"></a> <span class="n">CajaOperationHandle</span> <span class="o">*</span><span class="n">handle</span><span class="p">)</span> <span class="p">{</span> +<a name="line-436"></a> <span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="n">dfic</span> <span class="o">=</span> <span class="p">(</span><span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">handle</span><span class="p">;</span> +<a name="line-437"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-438"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-439"></a><span class="p">}</span> +<a name="line-440"></a> +<a name="line-441"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-442"></a><span class="n">menu_item_cb</span><span class="p">(</span><span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">,</span> +<a name="line-443"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-444"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">verb</span><span class="p">;</span> +<a name="line-445"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">;</span> +<a name="line-446"></a> <span class="n">DropboxGeneralCommand</span> <span class="o">*</span><span class="n">dcac</span><span class="p">;</span> +<a name="line-447"></a> +<a name="line-448"></a> <span class="n">dcac</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-449"></a> +<a name="line-450"></a> <span class="cm">/* maybe these would be better passed in a container</span> +<a name="line-451"></a><span class="cm"> struct used as the userdata pointer, oh well this</span> +<a name="line-452"></a><span class="cm"> is how dave camp does it */</span> +<a name="line-453"></a> <span class="n">files</span> <span class="o">=</span> <span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_files"</span><span class="p">);</span> +<a name="line-454"></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_verb"</span><span class="p">);</span> +<a name="line-455"></a> +<a name="line-456"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a name="line-457"></a> +<a name="line-458"></a> <span class="cm">/* build the argument list */</span> +<a name="line-459"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-460"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-461"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-462"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_strfreev</span><span class="p">);</span> +<a name="line-463"></a> <span class="p">{</span> +<a name="line-464"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">arglist</span><span class="p">;</span> +<a name="line-465"></a> <span class="n">guint</span> <span class="n">i</span><span class="p">;</span> +<a name="line-466"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">li</span><span class="p">;</span> +<a name="line-467"></a> +<a name="line-468"></a> <span class="n">arglist</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-469"></a> +<a name="line-470"></a> <span class="k">for</span> <span class="p">(</span><span class="n">li</span> <span class="o">=</span> <span class="n">files</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">li</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">li</span> <span class="o">=</span> <span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span> <span class="p">{</span> +<a name="line-471"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">CAJA_FILE_INFO</span><span class="p">(</span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">));</span> +<a name="line-472"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">path</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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-473"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-474"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">path</span><span class="p">)</span> +<a name="line-475"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-476"></a> <span class="n">arglist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">path</span><span class="p">;</span> +<a name="line-477"></a> <span class="n">i</span><span class="o">++</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="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> +<a name="line-481"></a> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span> +<a name="line-482"></a> <span class="n">arglist</span><span class="p">);</span> +<a name="line-483"></a> <span class="p">}</span> +<a name="line-484"></a> +<a name="line-485"></a> <span class="p">{</span> +<a name="line-486"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">arglist</span><span class="p">;</span> +<a name="line-487"></a> <span class="n">arglist</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> +<a name="line-488"></a> <span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">);</span> +<a name="line-489"></a> <span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-490"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"verb"</span><span class="p">),</span> <span class="n">arglist</span><span class="p">);</span> +<a name="line-491"></a> <span class="p">}</span> +<a name="line-492"></a> +<a name="line-493"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_action"</span><span class="p">);</span> +<a name="line-494"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">handler</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-495"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">handler_ud</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-496"></a> +<a name="line-497"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dcac</span><span class="p">);</span> +<a name="line-498"></a><span class="p">}</span> +<a name="line-499"></a> +<a name="line-500"></a><span class="k">static</span> <span class="kt">char</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">gchar</span> <span class="n">ch</span><span class="p">)</span> <span class="p">{</span> +<a name="line-501"></a> <span class="k">return</span> <span class="nf">isdigit</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="o">?</span> <span class="n">ch</span> <span class="o">-</span> <span class="sc">'0'</span> <span class="o">:</span> <span class="n">tolower</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="o">-</span> <span class="sc">'a'</span> <span class="o">+</span> <span class="mi">10</span><span class="p">;</span> +<a name="line-502"></a><span class="p">}</span> +<a name="line-503"></a> +<a name="line-504"></a><span class="c1">// decode in --> out, but dont fill more than n chars into out</span> +<a name="line-505"></a><span class="c1">// returns len of out if thing went well, -1 if n wasn't big enough</span> +<a name="line-506"></a><span class="c1">// can be used in place (whoa!)</span> +<a name="line-507"></a><span class="kt">int</span> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">gchar</span><span class="o">*</span> <span class="n">out</span><span class="p">,</span> <span class="n">gchar</span><span class="o">*</span> <span class="n">in</span><span class="p">,</span> <span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> +<a name="line-508"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">out_initial</span><span class="p">;</span> +<a name="line-509"></a> +<a name="line-510"></a> <span class="k">for</span><span class="p">(</span><span class="n">out_initial</span> <span class="o">=</span> <span class="n">out</span><span class="p">;</span> <span class="n">out</span><span class="o">-</span><span class="n">out_initial</span> <span class="o"><</span> <span class="n">n</span> <span class="o">&&</span> <span class="o">*</span><span class="n">in</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">;</span> <span class="n">out</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-511"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">in</span> <span class="o">==</span> <span class="sc">'%'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-512"></a> <span class="k">if</span> <span class="p">((</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">))</span> <span class="p">{</span> +<a name="line-513"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o"><<</span> <span class="mi">4</span> <span class="o">|</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span> +<a name="line-514"></a> <span class="n">in</span> <span class="o">+=</span> <span class="mi">3</span><span class="p">;</span> +<a name="line-515"></a> <span class="p">}</span> +<a name="line-516"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-517"></a> <span class="c1">// Input string isn't well-formed</span> +<a name="line-518"></a> <span class="k">return</span> <span class="mi">-1</span><span class="p">;</span> +<a name="line-519"></a> <span class="p">}</span> +<a name="line-520"></a> <span class="p">}</span> +<a name="line-521"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-522"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="o">*</span><span class="n">in</span><span class="p">;</span> +<a name="line-523"></a> <span class="n">in</span><span class="o">++</span><span class="p">;</span> +<a name="line-524"></a> <span class="p">}</span> +<a name="line-525"></a> <span class="p">}</span> +<a name="line-526"></a> +<a name="line-527"></a> <span class="k">if</span> <span class="p">(</span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span> <span class="o"><</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> +<a name="line-528"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> +<a name="line-529"></a> <span class="k">return</span> <span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="p">;</span> +<a name="line-530"></a> <span class="p">}</span> +<a name="line-531"></a> <span class="k">return</span> <span class="mi">-1</span><span class="p">;</span> +<a name="line-532"></a><span class="p">}</span> +<a name="line-533"></a> +<a name="line-534"></a><span class="k">static</span> <span class="kt">int</span> +<a name="line-535"></a><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">gchar</span> <span class="o">**</span><span class="n">options</span><span class="p">,</span> +<a name="line-536"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">menu</span><span class="p">,</span> +<a name="line-537"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">old_action_string</span><span class="p">,</span> +<a name="line-538"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">toret</span><span class="p">,</span> +<a name="line-539"></a> <span class="n">CajaMenuProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-540"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">)</span> +<a name="line-541"></a><span class="p">{</span> +<a name="line-542"></a> <span class="kt">int</span> <span class="n">ret</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-543"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a name="line-544"></a> +<a name="line-545"></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">options</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-546"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">option_info</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">"~"</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span> +<a name="line-547"></a> <span class="cm">/* if this is a valid string */</span> +<a name="line-548"></a> <span class="k">if</span> <span class="p">(</span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> +<a name="line-549"></a> <span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-550"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span> +<a name="line-551"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-552"></a> <span class="p">}</span> +<a name="line-553"></a> +<a name="line-554"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">item_name</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> +<a name="line-555"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">item_inner</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> +<a name="line-556"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">verb</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> +<a name="line-557"></a> +<a name="line-558"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_name</span><span class="p">,</span> <span class="n">item_name</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">item_name</span><span class="p">));</span> +<a name="line-559"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">verb</span><span class="p">));</span> +<a name="line-560"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="n">item_inner</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">item_inner</span><span class="p">));</span> +<a name="line-561"></a> +<a name="line-562"></a> <span class="c1">// If the inner section has a menu in it then we create a submenu. The verb will be ignored.</span> +<a name="line-563"></a> <span class="c1">// Otherwise add the verb to our map and add the menu item to the list.</span> +<a name="line-564"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="sc">'~'</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-565"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">new_action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span> +<a name="line-566"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">suboptions</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="s">"|"</span><span class="p">,</span> <span class="mi">-1</span><span class="p">);</span> +<a name="line-567"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">;</span> +<a name="line-568"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">submenu</span> <span class="o">=</span> <span class="n">caja_menu_new</span><span class="p">();</span> +<a name="line-569"></a> +<a name="line-570"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">item_name</span><span class="p">);</span> +<a name="line-571"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="s">"::"</span><span class="p">);</span> +<a name="line-572"></a> +<a name="line-573"></a> <span class="n">ret</span> <span class="o">+=</span> <span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">suboptions</span><span class="p">,</span> <span class="n">submenu</span><span class="p">,</span> <span class="n">new_action_string</span><span class="p">,</span> +<a name="line-574"></a> <span class="n">toret</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">files</span><span class="p">);</span> +<a name="line-575"></a> +<a name="line-576"></a> <span class="n">item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span> +<a name="line-577"></a> <span class="n">item_name</span><span class="p">,</span> <span class="s">""</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-578"></a> <span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">submenu</span><span class="p">);</span> +<a name="line-579"></a> <span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span> <span class="n">item</span><span class="p">);</span> +<a name="line-580"></a> +<a name="line-581"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">suboptions</span><span class="p">);</span> +<a name="line-582"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> +<a name="line-583"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">submenu</span><span class="p">);</span> +<a name="line-584"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-585"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-586"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">;</span> +<a name="line-587"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">new_action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span> +<a name="line-588"></a> <span class="n">gboolean</span> <span class="n">grayed_out</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-589"></a> +<a name="line-590"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">verb</span><span class="p">);</span> +<a name="line-591"></a> +<a name="line-592"></a> <span class="k">if</span> <span class="p">(</span><span class="n">item_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'!'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-593"></a> <span class="n">item_name</span><span class="o">++</span><span class="p">;</span> +<a name="line-594"></a> <span class="n">grayed_out</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-595"></a> <span class="p">}</span> +<a name="line-596"></a> +<a name="line-597"></a> <span class="n">item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span> <span class="n">item_name</span><span class="p">,</span> <span class="n">item_inner</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-598"></a> +<a name="line-599"></a> <span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span> <span class="n">item</span><span class="p">);</span> +<a name="line-600"></a> <span class="cm">/* add the file metadata to this item */</span> +<a name="line-601"></a> <span class="n">g_object_set_data_full</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_files"</span><span class="p">,</span> +<a name="line-602"></a> <span class="n">caja_file_info_list_copy</span> <span class="p">(</span><span class="n">files</span><span class="p">),</span> +<a name="line-603"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">caja_file_info_list_free</span><span class="p">);</span> +<a name="line-604"></a> <span class="cm">/* add the verb metadata */</span> +<a name="line-605"></a> <span class="n">g_object_set_data_full</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_verb"</span><span class="p">,</span> +<a name="line-606"></a> <span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">),</span> +<a name="line-607"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">);</span> +<a name="line-608"></a> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s">"activate"</span><span class="p">,</span> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">menu_item_cb</span><span class="p">),</span> <span class="n">provider</span><span class="p">);</span> +<a name="line-609"></a> +<a name="line-610"></a> <span class="k">if</span> <span class="p">(</span><span class="n">grayed_out</span><span class="p">)</span> <span class="p">{</span> +<a name="line-611"></a> <span class="n">GValue</span> <span class="n">sensitive</span> <span class="o">=</span> <span class="p">{</span> <span class="mi">0</span> <span class="p">};</span> +<a name="line-612"></a> <span class="n">g_value_init</span> <span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span> <span class="n">G_TYPE_BOOLEAN</span><span class="p">);</span> +<a name="line-613"></a> <span class="n">g_value_set_boolean</span> <span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-614"></a> <span class="n">g_object_set_property</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"sensitive"</span><span class="p">,</span> <span class="o">&</span><span class="n">sensitive</span><span class="p">);</span> +<a name="line-615"></a> <span class="p">}</span> +<a name="line-616"></a> +<a name="line-617"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> +<a name="line-618"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-619"></a> <span class="n">ret</span><span class="o">++</span><span class="p">;</span> +<a name="line-620"></a> <span class="p">}</span> +<a name="line-621"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span> +<a name="line-622"></a> <span class="p">}</span> +<a name="line-623"></a> <span class="k">return</span> <span class="n">ret</span><span class="p">;</span> +<a name="line-624"></a><span class="p">}</span> +<a name="line-625"></a> +<a name="line-626"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-627"></a><span class="n">get_file_items_callback</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">response</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">)</span> +<a name="line-628"></a><span class="p">{</span> +<a name="line-629"></a> <span class="n">GAsyncQueue</span> <span class="o">*</span><span class="n">reply_queue</span> <span class="o">=</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-630"></a> +<a name="line-631"></a> <span class="cm">/* queue_push doesn't accept NULL as a value so we create an empty hash table</span> +<a name="line-632"></a><span class="cm"> * if we got no response. */</span> +<a name="line-633"></a> <span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span> <span class="n">response</span> <span class="o">?</span> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">response</span><span class="p">)</span> <span class="o">:</span> +<a name="line-634"></a> <span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">));</span> +<a name="line-635"></a> <span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a name="line-636"></a><span class="p">}</span> +<a name="line-637"></a> +<a name="line-638"></a> +<a name="line-639"></a><span class="k">static</span> <span class="n">GList</span> <span class="o">*</span> +<a name="line-640"></a><span class="n">caja_dropbox_get_file_items</span><span class="p">(</span><span class="n">CajaMenuProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-641"></a> <span class="n">GtkWidget</span> <span class="o">*</span><span class="n">window</span><span class="p">,</span> +<a name="line-642"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">)</span> +<a name="line-643"></a><span class="p">{</span> +<a name="line-644"></a> <span class="cm">/*</span> +<a name="line-645"></a><span class="cm"> * 1. Convert files to filenames.</span> +<a name="line-646"></a><span class="cm"> */</span> +<a name="line-647"></a> <span class="kt">int</span> <span class="n">file_count</span> <span class="o">=</span> <span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">);</span> +<a name="line-648"></a> +<a name="line-649"></a> <span class="k">if</span> <span class="p">(</span><span class="n">file_count</span> <span class="o"><</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-650"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-651"></a> +<a name="line-652"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">paths</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="n">file_count</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-653"></a> <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-654"></a> <span class="n">GList</span><span class="o">*</span> <span class="n">elem</span><span class="p">;</span> +<a name="line-655"></a> +<a name="line-656"></a> <span class="k">for</span> <span class="p">(</span><span class="n">elem</span> <span class="o">=</span> <span class="n">files</span><span class="p">;</span> <span class="n">elem</span><span class="p">;</span> <span class="n">elem</span> <span class="o">=</span> <span class="n">elem</span><span class="o">-></span><span class="n">next</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-657"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">elem</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> +<a name="line-658"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename_un</span> <span class="o">=</span> <span class="n">uri</span> <span class="o">?</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-659"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span> <span class="o">=</span> <span class="n">filename_un</span> <span class="o">?</span> <span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</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> <span class="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-660"></a> +<a name="line-661"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-662"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span> +<a name="line-663"></a> +<a name="line-664"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-665"></a> <span class="cm">/* oooh, filename wasn't correctly encoded, or isn't a local file. */</span> +<a name="line-666"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span> +<a name="line-667"></a> <span class="k">return</span> <span class="nb">NULL</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="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">filename</span><span class="p">;</span> +<a name="line-671"></a> <span class="p">}</span> +<a name="line-672"></a> +<a name="line-673"></a> <span class="n">GAsyncQueue</span> <span class="o">*</span><span class="n">reply_queue</span> <span class="o">=</span> <span class="n">g_async_queue_new_full</span><span class="p">((</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="n">g_hash_table_unref</span><span class="p">);</span> +<a name="line-674"></a> +<a name="line-675"></a> <span class="cm">/*</span> +<a name="line-676"></a><span class="cm"> * 2. Create a DropboxGeneralCommand to call "icon_overlay_context_options"</span> +<a name="line-677"></a><span class="cm"> */</span> +<a name="line-678"></a> +<a name="line-679"></a> <span class="n">DropboxGeneralCommand</span> <span class="o">*</span><span class="n">dgc</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-680"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a name="line-681"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_options"</span><span class="p">);</span> +<a name="line-682"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-683"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-684"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-685"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_strfreev</span><span class="p">);</span> +<a name="line-686"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span> <span class="n">paths</span><span class="p">);</span> +<a name="line-687"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">handler</span> <span class="o">=</span> <span class="n">get_file_items_callback</span><span class="p">;</span> +<a name="line-688"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span> <span class="o">=</span> <span class="n">g_async_queue_ref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a name="line-689"></a> +<a name="line-690"></a> <span class="cm">/*</span> +<a name="line-691"></a><span class="cm"> * 3. Queue it up for the helper thread to run it.</span> +<a name="line-692"></a><span class="cm"> */</span> +<a name="line-693"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span> <span class="o">=</span> <span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span> +<a name="line-694"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dgc</span><span class="p">);</span> +<a name="line-695"></a> +<a name="line-696"></a> <span class="cm">/*</span> +<a name="line-697"></a><span class="cm"> * 4. We have to block until it's done because caja expects a reply. But we will</span> +<a name="line-698"></a><span class="cm"> * only block for 50 ms for a reply.</span> +<a name="line-699"></a><span class="cm"> */</span> +<a name="line-700"></a> +<a name="line-701"></a> <span class="n">GHashTable</span> <span class="o">*</span><span class="n">context_options_response</span> <span class="o">=</span> <span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span> <span class="mi">50000</span><span class="p">);</span> +<a name="line-702"></a> <span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</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">context_options_response</span><span class="p">)</span> <span class="p">{</span> +<a name="line-705"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-706"></a> <span class="p">}</span> +<a name="line-707"></a> +<a name="line-708"></a> <span class="cm">/*</span> +<a name="line-709"></a><span class="cm"> * 5. Parse the reply.</span> +<a name="line-710"></a><span class="cm"> */</span> +<a name="line-711"></a> +<a name="line-712"></a> <span class="kt">char</span> <span class="o">**</span><span class="n">options</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">,</span> <span class="s">"options"</span><span class="p">);</span> +<a name="line-713"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-714"></a> +<a name="line-715"></a> <span class="k">if</span> <span class="p">(</span><span class="n">options</span> <span class="o">&&</span> <span class="o">*</span><span class="n">options</span> <span class="o">&&</span> <span class="o">**</span><span class="n">options</span><span class="p">)</span> <span class="p">{</span> +<a name="line-716"></a> <span class="cm">/* build the menu */</span> +<a name="line-717"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">root_item</span><span class="p">;</span> +<a name="line-718"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">root_menu</span><span class="p">;</span> +<a name="line-719"></a> +<a name="line-720"></a> <span class="n">root_menu</span> <span class="o">=</span> <span class="n">caja_menu_new</span><span class="p">();</span> +<a name="line-721"></a> <span class="n">root_item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="s">"CajaDropbox::root_item"</span><span class="p">,</span> +<a name="line-722"></a> <span class="s">"Dropbox"</span><span class="p">,</span> <span class="s">"Dropbox Options"</span><span class="p">,</span> <span class="s">"dropbox"</span><span class="p">);</span> +<a name="line-723"></a> +<a name="line-724"></a> <span class="n">toret</span> <span class="o">=</span> <span class="n">g_list_append</span><span class="p">(</span><span class="n">toret</span><span class="p">,</span> <span class="n">root_item</span><span class="p">);</span> +<a name="line-725"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="s">"CajaDropbox::"</span><span class="p">);</span> +<a name="line-726"></a> +<a name="line-727"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">root_menu</span><span class="p">,</span> <span class="n">action_string</span><span class="p">,</span> +<a name="line-728"></a> <span class="n">toret</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">files</span><span class="p">))</span> <span class="p">{</span> +<a name="line-729"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">toret</span><span class="p">);</span> +<a name="line-730"></a> <span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-731"></a> <span class="p">}</span> +<a name="line-732"></a> +<a name="line-733"></a> <span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">root_item</span><span class="p">,</span> <span class="n">root_menu</span><span class="p">);</span> +<a name="line-734"></a> +<a name="line-735"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-736"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">root_menu</span><span class="p">);</span> +<a name="line-737"></a> <span class="p">}</span> +<a name="line-738"></a> +<a name="line-739"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">);</span> +<a name="line-740"></a> +<a name="line-741"></a> <span class="k">return</span> <span class="n">toret</span><span class="p">;</span> +<a name="line-742"></a><span class="p">}</span> +<a name="line-743"></a> +<a name="line-744"></a><span class="n">gboolean</span> +<a name="line-745"></a><span class="n">add_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span> <span class="n">emblem_paths_response</span><span class="p">)</span> +<a name="line-746"></a><span class="p">{</span> +<a name="line-747"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a name="line-748"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="error2"><--- Assuming that condition '!emblem_paths_response' is not redundant</span> +</span><a name="line-749"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-750"></a> +<a name="line-751"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">emblem_paths_list</span><span class="p">;</span> +<a name="line-752"></a><span class="hll"> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-753"></a> +<a name="line-754"></a> <span class="n">GtkIconTheme</span> <span class="o">*</span><span class="n">theme</span> <span class="o">=</span> <span class="n">gtk_icon_theme_get_default</span><span class="p">();</span> +<a name="line-755"></a> +<a name="line-756"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_response</span> <span class="o">&&</span><span class="error2"><--- Condition 'emblem_paths_response' is always true</span> +</span><a name="line-757"></a> <span class="p">(</span><span class="n">emblem_paths_list</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">)))</span> <span class="p">{</span> +<a name="line-758"></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">emblem_paths_list</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-759"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> +<a name="line-760"></a> <span class="n">gtk_icon_theme_append_search_path</span><span class="p">(</span><span class="n">theme</span><span class="p">,</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-761"></a> <span class="p">}</span> +<a name="line-762"></a> <span class="p">}</span> +<a name="line-763"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a name="line-764"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-765"></a><span class="p">}</span> +<a name="line-766"></a> +<a name="line-767"></a><span class="n">gboolean</span> +<a name="line-768"></a><span class="n">remove_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span> <span class="n">emblem_paths_response</span><span class="p">)</span> +<a name="line-769"></a><span class="p">{</span> +<a name="line-770"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a name="line-771"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span> +<a name="line-772"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-773"></a> +<a name="line-774"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">emblem_paths_list</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">);</span> +<a name="line-775"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_list</span><span class="p">)</span> +<a name="line-776"></a> <span class="k">goto</span> <span class="n">exit</span><span class="p">;</span> +<a name="line-777"></a> +<a name="line-778"></a> <span class="c1">// We need to remove the old paths.</span> +<a name="line-779"></a> <span class="n">GtkIconTheme</span> <span class="o">*</span> <span class="n">icon_theme</span> <span class="o">=</span> <span class="n">gtk_icon_theme_get_default</span><span class="p">();</span> +<a name="line-780"></a> <span class="n">gchar</span> <span class="o">**</span> <span class="n">paths</span><span class="p">;</span> +<a name="line-781"></a> <span class="n">gint</span> <span class="n">path_count</span><span class="p">;</span> +<a name="line-782"></a> +<a name="line-783"></a> <span class="n">gtk_icon_theme_get_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span> <span class="o">&</span><span class="n">paths</span><span class="p">,</span> <span class="o">&</span><span class="n">path_count</span><span class="p">);</span> +<a name="line-784"></a> +<a name="line-785"></a> <span class="n">gint</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-786"></a> <span class="n">gboolean</span> <span class="n">found</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-787"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">path_count</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-788"></a> <span class="n">gboolean</span> <span class="n">keep</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-789"></a> <span class="k">for</span> <span class="p">(</span><span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">j</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-790"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="p">{</span> +<a name="line-791"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">g_strcmp0</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span> <span class="p">{</span> +<a name="line-792"></a> <span class="n">found</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-793"></a> <span class="n">keep</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-794"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-795"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-796"></a> <span class="p">}</span> +<a name="line-797"></a> <span class="p">}</span> +<a name="line-798"></a> <span class="p">}</span> +<a name="line-799"></a> <span class="k">if</span> <span class="p">(</span><span class="n">keep</span><span class="p">)</span> <span class="p">{</span> +<a name="line-800"></a> <span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span> <span class="o">=</span> <span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a name="line-801"></a> <span class="n">out</span><span class="o">++</span><span class="p">;</span> +<a name="line-802"></a> <span class="p">}</span> +<a name="line-803"></a> <span class="p">}</span> +<a name="line-804"></a> +<a name="line-805"></a> <span class="cm">/* If we found one we need to reset the path to</span> +<a name="line-806"></a><span class="cm"> accomodate the changes */</span> +<a name="line-807"></a> <span class="k">if</span> <span class="p">(</span><span class="n">found</span><span class="p">)</span> <span class="p">{</span> +<a name="line-808"></a> <span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="cm">/* Clear the last one */</span> +<a name="line-809"></a> <span class="n">gtk_icon_theme_set_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span> <span class="p">(</span><span class="k">const</span> <span class="n">gchar</span> <span class="o">**</span><span class="p">)</span><span class="n">paths</span><span class="p">,</span> <span class="n">out</span><span class="p">);</span> +<a name="line-810"></a> <span class="p">}</span> +<a name="line-811"></a> +<a name="line-812"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span> +<a name="line-813"></a><span class="nl">exit</span><span class="p">:</span> +<a name="line-814"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a name="line-815"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-816"></a><span class="p">}</span> +<a name="line-817"></a> +<a name="line-818"></a><span class="kt">void</span> <span class="n">get_emblem_paths_cb</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> +<a name="line-819"></a><span class="p">{</span> +<a name="line-820"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span> <span class="p">{</span> +<a name="line-821"></a> <span class="n">emblem_paths_response</span> <span class="o">=</span> <span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-822"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">);</span> +<a name="line-823"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">,</span> <span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">);</span> +<a name="line-824"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-825"></a> <span class="cm">/* Increase the ref so that finish_general_command doesn't delete it. */</span> +<a name="line-826"></a> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a name="line-827"></a> <span class="p">}</span> +<a name="line-828"></a> +<a name="line-829"></a> <span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-830"></a> <span class="k">if</span> <span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">)</span> <span class="p">{</span> +<a name="line-831"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">remove_emblem_paths</span><span class="p">,</span> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span> +<a name="line-832"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-833"></a> <span class="p">}</span> +<a name="line-834"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="n">emblem_paths_response</span><span class="p">;</span> +<a name="line-835"></a> <span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-836"></a> +<a name="line-837"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">add_emblem_paths</span><span class="p">,</span> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">));</span> +<a name="line-838"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">reset_all_files</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-839"></a><span class="p">}</span> +<a name="line-840"></a> +<a name="line-841"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-842"></a><span class="n">on_connect</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-843"></a> <span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span> +<a name="line-844"></a> +<a name="line-845"></a> <span class="n">dropbox_command_client_send_command</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> +<a name="line-846"></a> <span class="p">(</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)</span> <span class="n">get_emblem_paths_cb</span><span class="p">,</span> +<a name="line-847"></a><span class="hll"> <span class="n">cvs</span><span class="p">,</span> <span class="s">"get_emblem_paths"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span><div class="verbose expandable"><span class="error2"><--- Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. <span class="marker">[+]</span></span><div class="content">Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. +The C99 standard, in section 7.15.1.1, states that if the type used by va_arg() is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined. +The value of the NULL macro is an implementation-defined null pointer constant (7.17), which can be any integer constant expression with the value 0, or such an expression casted to (void*) (6.3.2.3). This includes values like 0, 0L, or even 0LL. +In practice on common architectures, this will cause real crashes if sizeof(int) != sizeof(void*), and NULL is defined to 0 or any other null pointer constant that promotes to int. +To reproduce you might be able to use this little code example on 64bit platforms. If the output includes "ERROR", the sentinel had only 4 out of 8 bytes initialized to zero and was not detected as the final argument to stop argument processing via va_arg(). Changing the 0 to (void*)0 or 0L will make the "ERROR" output go away. +#include <stdarg.h> +#include <stdio.h> + +void f(char *s, ...) { + va_list ap; + va_start(ap,s); + for (;;) { + char *p = va_arg(ap,char*); + printf("%018p, %s\n", p, (long)p & 255 ? p : ""); + if(!p) break; + } + va_end(ap); +} + +void g() { + char *s2 = "x"; + char *s3 = "ERROR"; + + // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64 + f("first", s2, s2, s2, s2, s2, 0, s3, (char*)0); +} + +void h() { + int i; + volatile unsigned char a[1000]; + for (i = 0; i<sizeof(a); i++) + a[i] = -1; +} + +int main() { + h(); + g(); + return 0; +}</div></div> +</span><a name="line-848"></a><span class="p">}</span> +<a name="line-849"></a> +<a name="line-850"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-851"></a><span class="n">on_disconnect</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-852"></a> <span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span> +<a name="line-853"></a> +<a name="line-854"></a> <span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-855"></a> <span class="cm">/* This call will free the data too. */</span> +<a name="line-856"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">remove_emblem_paths</span><span class="p">,</span> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span> +<a name="line-857"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-858"></a> <span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-859"></a><span class="p">}</span> +<a name="line-860"></a> +<a name="line-861"></a> +<a name="line-862"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-863"></a><span class="n">caja_dropbox_menu_provider_iface_init</span> <span class="p">(</span><span class="n">CajaMenuProviderIface</span> <span class="o">*</span><span class="n">iface</span><span class="p">)</span> <span class="p">{</span> +<a name="line-864"></a> <span class="n">iface</span><span class="o">-></span><span class="n">get_file_items</span> <span class="o">=</span> <span class="n">caja_dropbox_get_file_items</span><span class="p">;</span> +<a name="line-865"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-866"></a><span class="p">}</span> +<a name="line-867"></a> +<a name="line-868"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-869"></a><span class="n">caja_dropbox_info_provider_iface_init</span> <span class="p">(</span><span class="n">CajaInfoProviderIface</span> <span class="o">*</span><span class="n">iface</span><span class="p">)</span> <span class="p">{</span> +<a name="line-870"></a> <span class="n">iface</span><span class="o">-></span><span class="n">update_file_info</span> <span class="o">=</span> <span class="n">caja_dropbox_update_file_info</span><span class="p">;</span> +<a name="line-871"></a> <span class="n">iface</span><span class="o">-></span><span class="n">cancel_update</span> <span class="o">=</span> <span class="n">caja_dropbox_cancel_update</span><span class="p">;</span> +<a name="line-872"></a> <span class="k">return</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">static</span> <span class="kt">void</span> +<a name="line-876"></a><span class="n">caja_dropbox_instance_init</span> <span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-877"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-878"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-879"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-880"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-881"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_direct_hash</span><span class="p">,</span> +<a name="line-882"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_direct_equal</span><span class="p">,</span> +<a name="line-883"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-884"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">);</span> +<a name="line-885"></a> <span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-886"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-887"></a> +<a name="line-888"></a> <span class="cm">/* setup the connection obj*/</span> +<a name="line-889"></a> <span class="n">dropbox_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span> +<a name="line-890"></a> +<a name="line-891"></a> <span class="cm">/* our hooks */</span> +<a name="line-892"></a> <span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span> <span class="s">"shell_touch"</span><span class="p">,</span> +<a name="line-893"></a> <span class="p">(</span><span class="n">DropboxUpdateHook</span><span class="p">)</span> <span class="n">handle_shell_touch</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-894"></a> +<a name="line-895"></a> <span class="cm">/* add connection handlers */</span> +<a name="line-896"></a> <span class="n">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span> +<a name="line-897"></a> <span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span> <span class="n">on_connect</span><span class="p">,</span> +<a name="line-898"></a> <span class="n">cvs</span><span class="p">);</span> +<a name="line-899"></a> <span class="n">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span> +<a name="line-900"></a> <span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span> <span class="n">on_disconnect</span><span class="p">,</span> +<a name="line-901"></a> <span class="n">cvs</span><span class="p">);</span> +<a name="line-902"></a> +<a name="line-903"></a> <span class="cm">/* now start the connection */</span> +<a name="line-904"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"about to start client connection"</span><span class="p">);</span> +<a name="line-905"></a> <span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span> +<a name="line-906"></a> +<a name="line-907"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-908"></a><span class="p">}</span> +<a name="line-909"></a> +<a name="line-910"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-911"></a><span class="n">caja_dropbox_class_init</span> <span class="p">(</span><span class="n">CajaDropboxClass</span> <span class="o">*</span><span class="n">class</span><span class="p">)</span> <span class="p">{</span> +<a name="line-912"></a><span class="p">}</span> +<a name="line-913"></a> +<a name="line-914"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-915"></a><span class="n">caja_dropbox_class_finalize</span> <span class="p">(</span><span class="n">CajaDropboxClass</span> <span class="o">*</span><span class="n">class</span><span class="p">)</span> <span class="p">{</span> +<a name="line-916"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"just checking"</span><span class="p">);</span> +<a name="line-917"></a> <span class="cm">/* kill threads here? */</span> +<a name="line-918"></a><span class="p">}</span> +<a name="line-919"></a> +<a name="line-920"></a><span class="n">GType</span> +<a name="line-921"></a><span class="n">caja_dropbox_get_type</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span> +<a name="line-922"></a> <span class="k">return</span> <span class="n">dropbox_type</span><span class="p">;</span> +<a name="line-923"></a><span class="p">}</span> +<a name="line-924"></a> +<a name="line-925"></a><span class="kt">void</span> +<a name="line-926"></a><span class="n">caja_dropbox_register_type</span> <span class="p">(</span><span class="n">GTypeModule</span> <span class="o">*</span><span class="n">module</span><span class="p">)</span> <span class="p">{</span> +<a name="line-927"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GTypeInfo</span> <span class="n">info</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-928"></a> <span class="k">sizeof</span> <span class="p">(</span><span class="n">CajaDropboxClass</span><span class="p">),</span> +<a name="line-929"></a> <span class="p">(</span><span class="n">GBaseInitFunc</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-930"></a> <span class="p">(</span><span class="n">GBaseFinalizeFunc</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-931"></a> <span class="p">(</span><span class="n">GClassInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_class_init</span><span class="p">,</span> +<a name="line-932"></a> <span class="p">(</span><span class="n">GClassFinalizeFunc</span><span class="p">)</span> <span class="n">caja_dropbox_class_finalize</span><span class="p">,</span> +<a name="line-933"></a> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-934"></a> <span class="k">sizeof</span> <span class="p">(</span><span class="n">CajaDropbox</span><span class="p">),</span> +<a name="line-935"></a> <span class="mi">0</span><span class="p">,</span> +<a name="line-936"></a> <span class="p">(</span><span class="n">GInstanceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_instance_init</span><span class="p">,</span> +<a name="line-937"></a> <span class="p">};</span> +<a name="line-938"></a> +<a name="line-939"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GInterfaceInfo</span> <span class="n">menu_provider_iface_info</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-940"></a> <span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_menu_provider_iface_init</span><span class="p">,</span> +<a name="line-941"></a> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-942"></a> <span class="nb">NULL</span> +<a name="line-943"></a> <span class="p">};</span> +<a name="line-944"></a> +<a name="line-945"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GInterfaceInfo</span> <span class="n">info_provider_iface_info</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-946"></a> <span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_info_provider_iface_init</span><span class="p">,</span> +<a name="line-947"></a> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-948"></a> <span class="nb">NULL</span> +<a name="line-949"></a> <span class="p">};</span> +<a name="line-950"></a> +<a name="line-951"></a> <span class="n">dropbox_type</span> <span class="o">=</span> +<a name="line-952"></a> <span class="n">g_type_module_register_type</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a name="line-953"></a> <span class="n">G_TYPE_OBJECT</span><span class="p">,</span> +<a name="line-954"></a> <span class="s">"CajaDropbox"</span><span class="p">,</span> +<a name="line-955"></a> <span class="o">&</span><span class="n">info</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-956"></a> +<a name="line-957"></a> <span class="n">g_type_module_add_interface</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a name="line-958"></a> <span class="n">dropbox_type</span><span class="p">,</span> +<a name="line-959"></a> <span class="n">CAJA_TYPE_MENU_PROVIDER</span><span class="p">,</span> +<a name="line-960"></a> <span class="o">&</span><span class="n">menu_provider_iface_info</span><span class="p">);</span> +<a name="line-961"></a> +<a name="line-962"></a> <span class="n">g_type_module_add_interface</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a name="line-963"></a> <span class="n">dropbox_type</span><span class="p">,</span> +<a name="line-964"></a> <span class="n">CAJA_TYPE_INFO_PROVIDER</span><span class="p">,</span> +<a name="line-965"></a> <span class="o">&</span><span class="n">info_provider_iface_info</span><span class="p">);</span> +<a name="line-966"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/index.html b/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/index.html new file mode 100644 index 0000000..c2b791a --- /dev/null +++ b/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/index.html @@ -0,0 +1,126 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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 - caja-dropbox: </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="uninitvar" name="uninitvar" checked></td><td>2</td><td>uninitvar</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="variableScope" name="variableScope" checked></td><td>2</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>1</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="missingIncludeSystem" name="missingIncludeSystem" checked></td><td>1</td><td>missingIncludeSystem</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="varFuncNullUB" name="varFuncNullUB" checked></td><td>1</td><td>varFuncNullUB</td></tr> + <tr><td></td><td>7</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="2.html"></a></td></tr> + <tr class="missingIncludeSystem"><td><a href="2.html#line-0">0</a></td><td>missingIncludeSystem</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">src/caja-dropbox-hooks.c</a></td></tr> + <tr class="uninitvar"><td><a href="0.html#line-69">69</a></td><td>uninitvar</td><td><a href="https://cwe.mitre.org/data/definitions/457.html">457</a></td><td>error</td><td class="error">Uninitialized variable: line</td></tr> + <tr class="uninitvar"><td><a href="0.html#line-86">86</a></td><td>uninitvar</td><td><a href="https://cwe.mitre.org/data/definitions/457.html">457</a></td><td>error</td><td class="error">Uninitialized variable: line</td></tr> + <tr><td colspan="5"><a href="1.html">src/caja-dropbox.c</a></td></tr> + <tr class="variableScope"><td><a href="1.html#line-312">312</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 'file' can be reduced.</td></tr> + <tr class="variableScope"><td><a href="1.html#line-752">752</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 'i' can be reduced.</td></tr> + <tr class="knownConditionTrueFalse"><td><a href="1.html#line-756">756</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td >Condition 'emblem_paths_response' is always true</td></tr> + <tr class="varFuncNullUB"><td><a href="1.html#line-847">847</a></td><td>varFuncNullUB</td><td><a href="https://cwe.mitre.org/data/definitions/475.html">475</a></td><td>portability</td><td >Passing NULL after the last typed argument to a variadic function leads to undefined behaviour.</td></tr> + </table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/stats.html b/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/stats.html new file mode 100644 index 0000000..c448fd4 --- /dev/null +++ b/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/stats.html @@ -0,0 +1,111 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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 - caja-dropbox: 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 error severity, total findings: 2<br> +   2 <a href="0.html"> src/caja-dropbox-hooks.c</a><br> +</p> +<p>Top 10 files for portability severity, total findings: 1<br> +   1 <a href="1.html"> src/caja-dropbox.c</a><br> +</p> +<p>Top 10 files for style severity, total findings: 3<br> +   3 <a href="1.html"> src/caja-dropbox.c</a><br> +</p> + + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/style.css b/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/style.css new file mode 100644 index 0000000..07125f4 --- /dev/null +++ b/2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_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; +} diff --git a/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/index.html b/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/index.html new file mode 100644 index 0000000..25d999c --- /dev/null +++ b/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/index.html @@ -0,0 +1,97 @@ +<html> +<head> +<title>rootdir - scan-build results</title> +<link type="text/css" rel="stylesheet" href="scanview.css"/> +<script src="sorttable.js"></script> +<script language='javascript' type="text/javascript"> +function SetDisplay(RowClass, DisplayVal) +{ + var Rows = document.getElementsByTagName("tr"); + for ( var i = 0 ; i < Rows.length; ++i ) { + if (Rows[i].className == RowClass) { + Rows[i].style.display = DisplayVal; + } + } +} + +function CopyCheckedStateToCheckButtons(SummaryCheckButton) { + var Inputs = document.getElementsByTagName("input"); + for ( var i = 0 ; i < Inputs.length; ++i ) { + if (Inputs[i].type == "checkbox") { + if(Inputs[i] != SummaryCheckButton) { + Inputs[i].checked = SummaryCheckButton.checked; + Inputs[i].onclick(); + } + } + } +} + +function returnObjById( id ) { + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +var NumUnchecked = 0; + +function ToggleDisplay(CheckButton, ClassName) { + if (CheckButton.checked) { + SetDisplay(ClassName, ""); + if (--NumUnchecked == 0) { + returnObjById("AllBugsCheck").checked = true; + } + } + else { + SetDisplay(ClassName, "none"); + NumUnchecked++; + returnObjById("AllBugsCheck").checked = false; + } +} +</script> +<!-- SUMMARYENDHEAD --> +</head> +<body> +<h1>rootdir - scan-build results</h1> + +<table> +<tr><th>User:</th><td>root@ac58bb3bdfde</td></tr> +<tr><th>Working Directory:</th><td>/rootdir</td></tr> +<tr><th>Command Line:</th><td>make -j 2</td></tr> +<tr><th>Clang Version:</th><td>clang version 12.0.0 (Fedora 12.0.0-2.fc34) +</td></tr> +<tr><th>Date:</th><td>Sat Jun 19 23:30:12 2021</td></tr> +</table> +<h2>Bug Summary</h2><table> +<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead> +<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">2</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr> +<tr><th>Logic error</th><th colspan=2></th></tr> +<tr><td class="SUMM_DESC">Cast from non-struct type to struct type</td><td class="Q">2</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_cast_from_non-struct_type_to_struct_type');" checked/></center></td></tr> +</table> +<h2>Reports</h2> + +<table class="sortable" style="table-layout:automatic"> +<thead><tr> + <td>Bug Group</td> + <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind"> ▾</span></td> + <td>File</td> + <td>Function/Method</td> + <td class="Q">Line</td> + <td class="Q">Path Length</td> + <td class="sorttable_nosort"></td> + <!-- REPORTBUGCOL --> +</tr></thead> +<tbody> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-58010e.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-58010e.html" --> +</tr> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-685866.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-685866.html" --> +</tr> +</tbody> +</table> + +</body></html> diff --git a/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/report-58010e.html b/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/report-58010e.html new file mode 100644 index 0000000..2a41cc8 --- /dev/null +++ b/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/report-58010e.html @@ -0,0 +1,1225 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/12.0.0 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -D PIC -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/12.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir /rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2021-06-19-233012-5833-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "S") { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].checked = !checked; + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> +</form> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + s.classList.remove("selected"); + }); + el.classList.add("selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); +} + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "j") { + navigateTo(/*up=*/false); + } else if (event.key == "k") { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/report-685866.html b/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/report-685866.html new file mode 100644 index 0000000..75fb396 --- /dev/null +++ b/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/report-685866.html @@ -0,0 +1,1225 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/12.0.0 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/12.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir /rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2021-06-19-233012-5833-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "S") { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].checked = !checked; + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> +</form> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + s.classList.remove("selected"); + }); + el.classList.add("selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); +} + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "j") { + navigateTo(/*up=*/false); + } else if (event.key == "k") { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/scanview.css b/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/scanview.css new file mode 100644 index 0000000..cf8a5a6 --- /dev/null +++ b/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/scanview.css @@ -0,0 +1,62 @@ +body { color:#000000; background-color:#ffffff } +body { font-family: Helvetica, sans-serif; font-size:9pt } +h1 { font-size: 14pt; } +h2 { font-size: 12pt; } +table { font-size:9pt } +table { border-spacing: 0px; border: 1px solid black } +th, table thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + font-weight: bold; font-family: Verdana; + white-space:nowrap; +} +.W { font-size:0px } +th, td { padding:5px; padding-left:8px; text-align:left } +td.SUMM_DESC { padding-left:12px } +td.DESC { white-space:pre } +td.Q { text-align:right } +td { text-align:left } +tbody.scrollContent { overflow:auto } + +table.form_group { + background-color: #ccc; + border: 1px solid #333; + padding: 2px; +} + +table.form_inner_group { + background-color: #ccc; + border: 1px solid #333; + padding: 0px; +} + +table.form { + background-color: #999; + border: 1px solid #333; + padding: 2px; +} + +td.form_label { + text-align: right; + vertical-align: top; +} +/* For one line entires */ +td.form_clabel { + text-align: right; + vertical-align: center; +} +td.form_value { + text-align: left; + vertical-align: top; +} +td.form_submit { + text-align: right; + vertical-align: top; +} + +h1.SubmitFail { + color: #f00; +} +h1.SubmitOk { +} diff --git a/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/sorttable.js b/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/sorttable.js new file mode 100644 index 0000000..32faa07 --- /dev/null +++ b/2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/sorttable.js @@ -0,0 +1,492 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backward compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + //row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[�$�]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; diff --git a/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/0.html b/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/0.html new file mode 100644 index 0000000..1dd5b39 --- /dev/null +++ b/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/0.html @@ -0,0 +1,849 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos pre { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } +span.linenos { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } +td.linenos pre.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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 - caja-dropbox: src/caja-dropbox-hooks.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> caja-dropbox-hooks.c</p> +<a href="0.html#line-69"> uninitvar 69</a><a href="0.html#line-80"> uninitvar 80</a><a href="0.html#line-86"> uninitvar 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 + 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</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/*</span> +<a name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * caja-dropbox-hooks.c</span> +<a name="line-5"></a><span class="cm"> * Implements connection handling and C interface for the Dropbox hook socket.</span> +<a name="line-6"></a><span class="cm"> *</span> +<a name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a name="line-8"></a><span class="cm"> *</span> +<a name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a name="line-13"></a><span class="cm"> *</span> +<a name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a name="line-18"></a><span class="cm"> *</span> +<a name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a name="line-21"></a><span class="cm"> *</span> +<a name="line-22"></a><span class="cm"> */</span> +<a name="line-23"></a> +<a name="line-24"></a><span class="cp">#include</span> <span class="cpf"><sys/types.h></span><span class="cp"></span> +<a name="line-25"></a><span class="cp">#include</span> <span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a name="line-26"></a><span class="cp">#include</span> <span class="cpf"><sys/un.h></span><span class="cp"></span> +<a name="line-27"></a><span class="cp">#include</span> <span class="cpf"><errno.h></span><span class="cp"></span> +<a name="line-28"></a><span class="cp">#include</span> <span class="cpf"><unistd.h></span><span class="cp"></span> +<a name="line-29"></a><span class="cp">#include</span> <span class="cpf"><fcntl.h></span><span class="cp"></span> +<a name="line-30"></a> +<a name="line-31"></a><span class="cp">#include</span> <span class="cpf"><string.h></span><span class="cp"></span> +<a name="line-32"></a> +<a name="line-33"></a><span class="cp">#include</span> <span class="cpf"><glib.h></span><span class="cp"></span> +<a name="line-34"></a> +<a name="line-35"></a><span class="cp">#include</span> <span class="cpf">"g-util.h"</span><span class="cp"></span> +<a name="line-36"></a><span class="cp">#include</span> <span class="cpf">"async-io-coroutine.h"</span><span class="cp"></span> +<a name="line-37"></a><span class="cp">#include</span> <span class="cpf">"dropbox-client-util.h"</span><span class="cp"></span> +<a name="line-38"></a><span class="cp">#include</span> <span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a name="line-39"></a> +<a name="line-40"></a><span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span> +<a name="line-41"></a> <span class="n">DropboxUpdateHook</span> <span class="n">hook</span><span class="p">;</span> +<a name="line-42"></a> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-43"></a><span class="p">}</span> <span class="n">HookData</span><span class="p">;</span> +<a name="line-44"></a> +<a name="line-45"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-46"></a><span class="n">try_to_connect</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">);</span> +<a name="line-47"></a> +<a name="line-48"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-49"></a><span class="n">handle_hook_server_input</span><span class="p">(</span><span class="n">GIOChannel</span> <span class="o">*</span><span class="n">chan</span><span class="p">,</span> +<a name="line-50"></a> <span class="n">GIOCondition</span> <span class="n">cond</span><span class="p">,</span> +<a name="line-51"></a> <span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-52"></a> <span class="cm">/*debug_enter(); */</span> +<a name="line-53"></a> +<a name="line-54"></a> <span class="cm">/* we have some sweet macros defined that allow us to write this</span> +<a name="line-55"></a><span class="cm"> async event handler like a microthread yeahh, watch out for context */</span> +<a name="line-56"></a> <span class="n">CRBEGIN</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span><span class="p">);</span> +<a name="line-57"></a> <span class="k">while</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-58"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span> <span class="o">=</span> +<a name="line-59"></a> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-60"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-61"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-62"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_strfreev</span><span class="p">);</span> +<a name="line-63"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-64"></a> +<a name="line-65"></a> <span class="cm">/* read the command name */</span> +<a name="line-66"></a> <span class="p">{</span> +<a name="line-67"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">line</span><span class="p">;</span> +<a name="line-68"></a> <span class="n">CRREADLINE</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span><span class="p">,</span> <span class="n">chan</span><span class="p">,</span> <span class="n">line</span><span class="p">);</span> +<a name="line-69"></a><span class="hll"> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span> <span class="o">=</span> <span class="n">dropbox_client_util_desanitize</span><span class="p">(</span><span class="n">line</span><span class="p">);</span><span class="error2"><--- Uninitialized variable: line</span> +</span><a name="line-70"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">line</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="cm">/*debug("got a hook name: %s", hookserv->hhsi.command_name); */</span> +<a name="line-74"></a> +<a name="line-75"></a> <span class="cm">/* now read each arg line (until a certain limit) until we receive "done" */</span> +<a name="line-76"></a> <span class="k">while</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-77"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">line</span><span class="p">;</span> +<a name="line-78"></a> +<a name="line-79"></a> <span class="cm">/* if too many arguments, this connection seems malicious */</span> +<a name="line-80"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span> <span class="o">>=</span> <span class="mi">20</span><span class="p">)</span> <span class="p">{</span><span class="error2"><--- Assuming condition is false</span> +</span><a name="line-81"></a> <span class="n">CRHALT</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="n">CRREADLINE</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span><span class="p">,</span> <span class="n">chan</span><span class="p">,</span> <span class="n">line</span><span class="p">);</span> +<a name="line-85"></a> +<a name="line-86"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"done"</span><span class="p">,</span> <span class="n">line</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span><span class="error2"><--- Uninitialized variable: line</span> +</span><a name="line-87"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a name="line-88"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-89"></a> <span class="p">}</span> +<a name="line-90"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-91"></a> <span class="n">gboolean</span> <span class="n">parse_result</span><span class="p">;</span> +<a name="line-92"></a> +<a name="line-93"></a> <span class="n">parse_result</span> <span class="o">=</span> +<a name="line-94"></a> <span class="n">dropbox_client_util_command_parse_arg</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> +<a name="line-95"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">);</span> +<a name="line-96"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a name="line-97"></a> +<a name="line-98"></a> <span class="k">if</span> <span class="p">(</span><span class="n">FALSE</span> <span class="o">==</span> <span class="n">parse_result</span><span class="p">)</span> <span class="p">{</span> +<a name="line-99"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"bad parse"</span><span class="p">);</span> +<a name="line-100"></a> <span class="n">CRHALT</span><span class="p">;</span> +<a name="line-101"></a> <span class="p">}</span> +<a name="line-102"></a> <span class="p">}</span> +<a name="line-103"></a> +<a name="line-104"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-105"></a> <span class="p">}</span> +<a name="line-106"></a> +<a name="line-107"></a> <span class="p">{</span> +<a name="line-108"></a> <span class="n">HookData</span> <span class="o">*</span><span class="n">hd</span><span class="p">;</span> +<a name="line-109"></a> <span class="n">hd</span> <span class="o">=</span> <span class="p">(</span><span class="n">HookData</span> <span class="o">*</span><span class="p">)</span> +<a name="line-110"></a> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">dispatch_table</span><span class="p">,</span> +<a name="line-111"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="p">);</span> +<a name="line-112"></a> <span class="k">if</span> <span class="p">(</span><span class="n">hd</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-113"></a> <span class="p">(</span><span class="n">hd</span><span class="o">-></span><span class="n">hook</span><span class="p">)(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">,</span> <span class="n">hd</span><span class="o">-></span><span class="n">ud</span><span class="p">);</span> +<a name="line-114"></a> <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="n">g_free</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="p">);</span> +<a name="line-118"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">);</span> +<a name="line-119"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-120"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-121"></a> <span class="p">}</span> +<a name="line-122"></a> <span class="n">CREND</span><span class="p">;</span> +<a name="line-123"></a><span class="p">}</span> +<a name="line-124"></a> +<a name="line-125"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-126"></a><span class="n">watch_killer</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-127"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"hook client disconnected"</span><span class="p">);</span> +<a name="line-128"></a> +<a name="line-129"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-130"></a> +<a name="line-131"></a> <span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-132"></a> +<a name="line-133"></a> <span class="cm">/* we basically just have to free the memory allocated in the</span> +<a name="line-134"></a><span class="cm"> handle_hook_server_init ctx */</span> +<a name="line-135"></a> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-136"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="p">);</span> +<a name="line-137"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-138"></a> <span class="p">}</span> +<a name="line-139"></a> +<a name="line-140"></a> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-141"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">);</span> +<a name="line-142"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-143"></a> <span class="p">}</span> +<a name="line-144"></a> +<a name="line-145"></a> <span class="n">g_io_channel_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">);</span> +<a name="line-146"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-147"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-148"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-149"></a> +<a name="line-150"></a> <span class="cm">/* lol we also have to start a new connection */</span> +<a name="line-151"></a> <span class="n">try_to_connect</span><span class="p">(</span><span class="n">hookserv</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="k">static</span> <span class="n">gboolean</span> +<a name="line-155"></a><span class="n">try_to_connect</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-156"></a> <span class="cm">/* create socket */</span> +<a name="line-157"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span> <span class="o">=</span> <span class="n">socket</span><span class="p">(</span><span class="n">PF_UNIX</span><span class="p">,</span> <span class="n">SOCK_STREAM</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-158"></a> +<a name="line-159"></a> <span class="cm">/* set native non-blocking, for connect timeout */</span> +<a name="line-160"></a> <span class="p">{</span> +<a name="line-161"></a> <span class="kt">int</span> <span class="n">flags</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">flags</span> <span class="o">=</span> <span class="n">fcntl</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span> <span class="n">F_GETFL</span><span class="p">,</span> <span class="mi">0</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-164"></a> <span class="k">goto</span> <span class="n">FAIL_CLEANUP</span><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">if</span> <span class="p">(</span><span class="n">fcntl</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span> <span class="n">F_SETFL</span><span class="p">,</span> <span class="n">flags</span> <span class="o">|</span> <span class="n">O_NONBLOCK</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-168"></a> <span class="k">goto</span> <span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a name="line-169"></a> <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="cm">/* connect to server, might fail of course */</span> +<a name="line-173"></a> <span class="p">{</span> +<a name="line-174"></a> <span class="k">struct</span> <span class="nc">sockaddr_un</span> <span class="n">addr</span><span class="p">;</span> +<a name="line-175"></a> <span class="kt">socklen_t</span> <span class="n">addr_len</span><span class="p">;</span> +<a name="line-176"></a> +<a name="line-177"></a> <span class="cm">/* intialize address structure */</span> +<a name="line-178"></a> <span class="n">addr</span><span class="p">.</span><span class="n">sun_family</span> <span class="o">=</span> <span class="n">AF_UNIX</span><span class="p">;</span> +<a name="line-179"></a> <span class="n">g_snprintf</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">,</span> +<a name="line-180"></a> <span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">),</span> +<a name="line-181"></a> <span class="s">"%s/.dropbox/iface_socket"</span><span class="p">,</span> +<a name="line-182"></a> <span class="n">g_get_home_dir</span><span class="p">());</span> +<a name="line-183"></a> <span class="n">addr_len</span> <span class="o">=</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span> <span class="o">-</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">)</span> <span class="o">+</span> <span class="n">strlen</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">);</span> +<a name="line-184"></a> +<a name="line-185"></a> <span class="cm">/* if there was an error we have to try again later */</span> +<a name="line-186"></a> <span class="k">if</span> <span class="p">(</span><span class="n">connect</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span> <span class="p">(</span><span class="k">struct</span> <span class="nc">sockaddr</span> <span class="o">*</span><span class="p">)</span> <span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">addr_len</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-187"></a> <span class="k">if</span> <span class="p">(</span><span class="n">errno</span> <span class="o">==</span> <span class="n">EINPROGRESS</span><span class="p">)</span> <span class="p">{</span> +<a name="line-188"></a> <span class="n">fd_set</span> <span class="n">writers</span><span class="p">;</span> +<a name="line-189"></a> <span class="k">struct</span> <span class="nc">timeval</span> <span class="n">tv</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">};</span> +<a name="line-190"></a> <span class="n">FD_ZERO</span><span class="p">(</span><span class="o">&</span><span class="n">writers</span><span class="p">);</span> +<a name="line-191"></a> <span class="n">FD_SET</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span> <span class="o">&</span><span class="n">writers</span><span class="p">);</span> +<a name="line-192"></a> +<a name="line-193"></a> <span class="cm">/* if nothing was ready after 3 seconds, fail out homie */</span> +<a name="line-194"></a> <span class="k">if</span> <span class="p">(</span><span class="n">select</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</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="o">&</span><span class="n">writers</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="o">&</span><span class="n">tv</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-195"></a> <span class="k">goto</span> <span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a name="line-196"></a> <span class="p">}</span> +<a name="line-197"></a> +<a name="line-198"></a> <span class="k">if</span> <span class="p">(</span><span class="n">connect</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span> <span class="p">(</span><span class="k">struct</span> <span class="nc">sockaddr</span> <span class="o">*</span><span class="p">)</span> <span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">addr_len</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-199"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"couldn't connect to hook server after 1 second"</span><span class="p">);</span> +<a name="line-200"></a> <span class="k">goto</span> <span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a name="line-201"></a> <span class="p">}</span> +<a name="line-202"></a> <span class="p">}</span> +<a name="line-203"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-204"></a> <span class="k">goto</span> <span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a name="line-205"></a> <span class="p">}</span> +<a name="line-206"></a> <span class="p">}</span> +<a name="line-207"></a> <span class="p">}</span> +<a name="line-208"></a> +<a name="line-209"></a> <span class="cm">/* lol sometimes i write funny codez */</span> +<a name="line-210"></a> <span class="k">if</span> <span class="p">(</span><span class="n">FALSE</span><span class="p">)</span> <span class="p">{</span> +<a name="line-211"></a> <span class="nl">FAIL_CLEANUP</span><span class="p">:</span> +<a name="line-212"></a> <span class="n">close</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">);</span> +<a name="line-213"></a> <span class="n">g_timeout_add_seconds</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">try_to_connect</span><span class="p">,</span> <span class="n">hookserv</span><span class="p">);</span> +<a name="line-214"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-215"></a> <span class="p">}</span> +<a name="line-216"></a> +<a name="line-217"></a> <span class="cm">/* great we connected!, let's create the channel and wait on it */</span> +<a name="line-218"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span> <span class="o">=</span> <span class="n">g_io_channel_unix_new</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">);</span> +<a name="line-219"></a> <span class="n">g_io_channel_set_line_term</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="mi">-1</span><span class="p">);</span> +<a name="line-220"></a> <span class="n">g_io_channel_set_close_on_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-221"></a> +<a name="line-222"></a> <span class="cm">/*debug("create channel"); */</span> +<a name="line-223"></a> +<a name="line-224"></a> <span class="cm">/* Set non-blocking ;) (again just in case) */</span> +<a name="line-225"></a> <span class="p">{</span> +<a name="line-226"></a> <span class="n">GIOFlags</span> <span class="n">flags</span><span class="p">;</span> +<a name="line-227"></a> <span class="n">GIOStatus</span> <span class="n">iostat</span><span class="p">;</span> +<a name="line-228"></a> +<a name="line-229"></a> <span class="n">flags</span> <span class="o">=</span> <span class="n">g_io_channel_get_flags</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">);</span> +<a name="line-230"></a> <span class="n">iostat</span> <span class="o">=</span> <span class="n">g_io_channel_set_flags</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span> <span class="n">flags</span> <span class="o">|</span> <span class="n">G_IO_FLAG_NONBLOCK</span><span class="p">,</span> +<a name="line-231"></a> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-232"></a> <span class="k">if</span> <span class="p">(</span><span class="n">iostat</span> <span class="o">==</span> <span class="n">G_IO_STATUS_ERROR</span><span class="p">)</span> <span class="p">{</span> +<a name="line-233"></a> <span class="n">g_io_channel_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">);</span> +<a name="line-234"></a> <span class="n">g_timeout_add_seconds</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">try_to_connect</span><span class="p">,</span> <span class="n">hookserv</span><span class="p">);</span> +<a name="line-235"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-236"></a> <span class="p">}</span> +<a name="line-237"></a> <span class="p">}</span> +<a name="line-238"></a> +<a name="line-239"></a> <span class="cm">/*debug("set non blocking"); */</span> +<a name="line-240"></a> +<a name="line-241"></a> <span class="cm">/* this is fun, async io watcher */</span> +<a name="line-242"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-243"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-244"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-245"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span> <span class="o">=</span> +<a name="line-246"></a> <span class="n">g_io_add_watch_full</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span> <span class="n">G_PRIORITY_DEFAULT</span><span class="p">,</span> +<a name="line-247"></a> <span class="n">G_IO_IN</span> <span class="o">|</span> <span class="n">G_IO_PRI</span> <span class="o">|</span> <span class="n">G_IO_ERR</span> <span class="o">|</span> <span class="n">G_IO_HUP</span> <span class="o">|</span> <span class="n">G_IO_NVAL</span><span class="p">,</span> +<a name="line-248"></a> <span class="p">(</span><span class="n">GIOFunc</span><span class="p">)</span> <span class="n">handle_hook_server_input</span><span class="p">,</span> <span class="n">hookserv</span><span class="p">,</span> +<a name="line-249"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">watch_killer</span><span class="p">);</span> +<a name="line-250"></a> +<a name="line-251"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"hook client connected"</span><span class="p">);</span> +<a name="line-252"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-253"></a> <span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-254"></a> +<a name="line-255"></a> <span class="cm">/*debug("added watch");*/</span> +<a name="line-256"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-257"></a><span class="p">}</span> +<a name="line-258"></a> +<a name="line-259"></a><span class="cm">/* should only be called in glib main loop */</span> +<a name="line-260"></a><span class="cm">/* returns a gboolean because it is a GSourceFunc */</span> +<a name="line-261"></a><span class="n">gboolean</span> <span class="n">caja_dropbox_hooks_force_reconnect</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-262"></a> <span class="n">debug_enter</span><span class="p">();</span> +<a name="line-263"></a> +<a name="line-264"></a> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span> <span class="o">==</span> <span class="n">FALSE</span><span class="p">)</span> <span class="p">{</span> +<a name="line-265"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-266"></a> <span class="p">}</span> +<a name="line-267"></a> +<a name="line-268"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"forcing hook to reconnect"</span><span class="p">);</span> +<a name="line-269"></a> +<a name="line-270"></a> <span class="n">g_assert</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-271"></a> +<a name="line-272"></a> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-273"></a> <span class="n">g_source_remove</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span><span class="p">);</span> +<a name="line-274"></a> <span class="p">}</span> +<a name="line-275"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-276"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"event source was zero!!!!!"</span><span class="p">);</span> +<a name="line-277"></a> <span class="p">}</span> +<a name="line-278"></a> +<a name="line-279"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-280"></a><span class="p">}</span> +<a name="line-281"></a> +<a name="line-282"></a><span class="n">gboolean</span> +<a name="line-283"></a><span class="n">caja_dropbox_hooks_is_connected</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-284"></a> <span class="k">return</span> <span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span><span class="p">;</span> +<a name="line-285"></a><span class="p">}</span> +<a name="line-286"></a> +<a name="line-287"></a><span class="kt">void</span> +<a name="line-288"></a><span class="n">caja_dropbox_hooks_setup</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-289"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">dispatch_table</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-290"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-291"></a> <span class="n">g_free</span><span class="p">,</span> <span class="n">g_free</span><span class="p">);</span> +<a name="line-292"></a> <span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-293"></a> +<a name="line-294"></a> <span class="n">g_hook_list_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">GHook</span><span class="p">));</span> +<a name="line-295"></a> <span class="n">g_hook_list_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">GHook</span><span class="p">));</span> +<a name="line-296"></a><span class="p">}</span> +<a name="line-297"></a> +<a name="line-298"></a><span class="kt">void</span> +<a name="line-299"></a><span class="n">caja_dropbox_hooks_add_on_disconnect_hook</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">,</span> +<a name="line-300"></a> <span class="n">DropboxHookClientConnectHook</span> <span class="n">dhcch</span><span class="p">,</span> +<a name="line-301"></a> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">)</span> <span class="p">{</span> +<a name="line-302"></a> <span class="n">GHook</span> <span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a name="line-303"></a> +<a name="line-304"></a> <span class="n">newhook</span> <span class="o">=</span> <span class="n">g_hook_alloc</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">));</span> +<a name="line-305"></a> <span class="n">newhook</span><span class="o">-></span><span class="n">func</span> <span class="o">=</span> <span class="n">dhcch</span><span class="p">;</span> +<a name="line-306"></a> <span class="n">newhook</span><span class="o">-></span><span class="n">data</span> <span class="o">=</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-307"></a> +<a name="line-308"></a> <span class="n">g_hook_append</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span> <span class="n">newhook</span><span class="p">);</span> +<a name="line-309"></a><span class="p">}</span> +<a name="line-310"></a> +<a name="line-311"></a><span class="kt">void</span> +<a name="line-312"></a><span class="n">caja_dropbox_hooks_add_on_connect_hook</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">,</span> +<a name="line-313"></a> <span class="n">DropboxHookClientConnectHook</span> <span class="n">dhcch</span><span class="p">,</span> +<a name="line-314"></a> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">)</span> <span class="p">{</span> +<a name="line-315"></a> <span class="n">GHook</span> <span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a name="line-316"></a> +<a name="line-317"></a> <span class="n">newhook</span> <span class="o">=</span> <span class="n">g_hook_alloc</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">));</span> +<a name="line-318"></a> <span class="n">newhook</span><span class="o">-></span><span class="n">func</span> <span class="o">=</span> <span class="n">dhcch</span><span class="p">;</span> +<a name="line-319"></a> <span class="n">newhook</span><span class="o">-></span><span class="n">data</span> <span class="o">=</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-320"></a> +<a name="line-321"></a> <span class="n">g_hook_append</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span> <span class="n">newhook</span><span class="p">);</span> +<a name="line-322"></a><span class="p">}</span> +<a name="line-323"></a> +<a name="line-324"></a><span class="kt">void</span> <span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">ndhs</span><span class="p">,</span> +<a name="line-325"></a> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">hook_name</span><span class="p">,</span> +<a name="line-326"></a> <span class="n">DropboxUpdateHook</span> <span class="n">hook</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">)</span> <span class="p">{</span> +<a name="line-327"></a> <span class="n">HookData</span> <span class="o">*</span><span class="n">hd</span><span class="p">;</span> +<a name="line-328"></a> <span class="n">hd</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">HookData</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-329"></a> <span class="n">hd</span><span class="o">-></span><span class="n">hook</span> <span class="o">=</span> <span class="n">hook</span><span class="p">;</span> +<a name="line-330"></a> <span class="n">hd</span><span class="o">-></span><span class="n">ud</span> <span class="o">=</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-331"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">ndhs</span><span class="o">-></span><span class="n">dispatch_table</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">hook_name</span><span class="p">),</span> <span class="n">hd</span><span class="p">);</span> +<a name="line-332"></a><span class="p">}</span> +<a name="line-333"></a> +<a name="line-334"></a><span class="kt">void</span> +<a name="line-335"></a><span class="n">caja_dropbox_hooks_start</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span> <span class="o">*</span><span class="n">hookserv</span><span class="p">)</span> <span class="p">{</span> +<a name="line-336"></a> <span class="n">try_to_connect</span><span class="p">(</span><span class="n">hookserv</span><span class="p">);</span> +<a name="line-337"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/1.html b/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/1.html new file mode 100644 index 0000000..9978714 --- /dev/null +++ b/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/1.html @@ -0,0 +1,2169 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos pre { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } +span.linenos { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } +td.linenos pre.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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 - caja-dropbox: src/caja-dropbox.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> caja-dropbox.c</p> +<a href="1.html#line-312"> variableScope 312</a><a href="1.html#line-748"> knownConditionTrueFalse 748</a><a href="1.html#line-752"> variableScope 752</a><a href="1.html#line-756"> knownConditionTrueFalse 756</a><a href="1.html#line-847"> varFuncNullUB 847</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</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/*</span> +<a name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * caja-dropbox.c</span> +<a name="line-5"></a><span class="cm"> * Implements the Caja extension API for Dropbox.</span> +<a name="line-6"></a><span class="cm"> *</span> +<a name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a name="line-8"></a><span class="cm"> *</span> +<a name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a name="line-13"></a><span class="cm"> *</span> +<a name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a name="line-18"></a><span class="cm"> *</span> +<a name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a name="line-21"></a><span class="cm"> *</span> +<a name="line-22"></a><span class="cm"> */</span> +<a name="line-23"></a> +<a name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a name="line-25"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="cp"></span> +<a name="line-26"></a><span class="cp">#endif</span> +<a name="line-27"></a> +<a name="line-28"></a><span class="cp">#include</span> <span class="cpf"><sys/types.h></span><span class="cp"></span> +<a name="line-29"></a><span class="cp">#include</span> <span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a name="line-30"></a><span class="cp">#include</span> <span class="cpf"><sys/un.h></span><span class="cp"></span> +<a name="line-31"></a><span class="cp">#include</span> <span class="cpf"><errno.h></span><span class="cp"></span> +<a name="line-32"></a><span class="cp">#include</span> <span class="cpf"><unistd.h></span><span class="cp"></span> +<a name="line-33"></a><span class="cp">#include</span> <span class="cpf"><ctype.h></span><span class="cp"></span> +<a name="line-34"></a> +<a name="line-35"></a><span class="cp">#include</span> <span class="cpf"><glib.h></span><span class="cp"></span> +<a name="line-36"></a><span class="cp">#include</span> <span class="cpf"><glib/gprintf.h></span><span class="cp"></span> +<a name="line-37"></a><span class="cp">#include</span> <span class="cpf"><glib-object.h></span><span class="cp"></span> +<a name="line-38"></a><span class="cp">#include</span> <span class="cpf"><gtk/gtk.h></span><span class="cp"></span> +<a name="line-39"></a> +<a name="line-40"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-extension-types.h></span><span class="cp"></span> +<a name="line-41"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-menu-provider.h></span><span class="cp"></span> +<a name="line-42"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="cp"></span> +<a name="line-43"></a> +<a name="line-44"></a><span class="cp">#include</span> <span class="cpf">"g-util.h"</span><span class="cp"></span> +<a name="line-45"></a><span class="cp">#include</span> <span class="cpf">"dropbox-command-client.h"</span><span class="cp"></span> +<a name="line-46"></a><span class="cp">#include</span> <span class="cpf">"caja-dropbox.h"</span><span class="cp"></span> +<a name="line-47"></a><span class="cp">#include</span> <span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a name="line-48"></a> +<a name="line-49"></a><span class="k">static</span> <span class="kt">char</span> <span class="o">*</span><span class="n">emblems</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span><span class="s">"dropbox-uptodate"</span><span class="p">,</span> <span class="s">"dropbox-syncing"</span><span class="p">,</span> <span class="s">"dropbox-unsyncable"</span><span class="p">};</span> +<a name="line-50"></a><span class="n">gchar</span> <span class="o">*</span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="n">EMBLEMDIR</span> <span class="p">,</span> <span class="nb">NULL</span> <span class="p">};</span> +<a name="line-51"></a> +<a name="line-52"></a><span class="n">gboolean</span> <span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span> +<a name="line-53"></a> +<a name="line-54"></a><span class="k">static</span> <span class="n">GType</span> <span class="n">dropbox_type</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-55"></a> +<a name="line-56"></a><span class="cm">/*</span> +<a name="line-57"></a><span class="cm"> Simplifies a path by removing navigation elements such as '.' and '..'</span> +<a name="line-58"></a> +<a name="line-59"></a><span class="cm"> Arguments:</span> +<a name="line-60"></a><span class="cm"> - path: input path to be canonicalized</span> +<a name="line-61"></a> +<a name="line-62"></a><span class="cm"> Returns:</span> +<a name="line-63"></a><span class="cm"> Canonicalized path if input path is valid.</span> +<a name="line-64"></a><span class="cm"> NULL otherwise.</span> +<a name="line-65"></a><span class="cm">*/</span> +<a name="line-66"></a><span class="k">static</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-67"></a><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">path</span><span class="p">)</span> <span class="p">{</span> +<a name="line-68"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-69"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-70"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">cpy</span><span class="p">,</span> <span class="o">**</span><span class="n">elts</span><span class="p">;</span> +<a name="line-71"></a> +<a name="line-72"></a> <span class="n">g_assert</span><span class="p">(</span><span class="n">path</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-73"></a> <span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'/'</span><span class="p">);</span> +<a name="line-74"></a> +<a name="line-75"></a> <span class="n">elts</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s">"/"</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-76"></a> <span class="n">cpy</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="n">g_strv_length</span><span class="p">(</span><span class="n">elts</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span> +<a name="line-77"></a> <span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="s">"/"</span><span class="p">;</span> +<a name="line-78"></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">elts</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-79"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">".."</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-80"></a> <span class="k">if</span> <span class="p">(</span><span class="n">j</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-81"></a> <span class="n">j</span><span class="o">--</span><span class="p">;</span> +<a name="line-82"></a> <span class="p">}</span> +<a name="line-83"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-84"></a> <span class="c1">// Input path has too many parent directory references and is invalid</span> +<a name="line-85"></a> <span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-86"></a> <span class="k">goto</span> <span class="n">exit</span><span class="p">;</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">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">"."</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-90"></a> <span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a name="line-91"></a> <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">cpy</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-95"></a> <span class="n">toret</span> <span class="o">=</span> <span class="n">g_build_filenamev</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span> +<a name="line-96"></a> +<a name="line-97"></a><span class="nl">exit</span><span class="p">:</span> +<a name="line-98"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span> +<a name="line-99"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">elts</span><span class="p">);</span> +<a name="line-100"></a> +<a name="line-101"></a> <span class="k">return</span> <span class="n">toret</span><span class="p">;</span> +<a name="line-102"></a><span class="p">}</span> +<a name="line-103"></a> +<a name="line-104"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-105"></a><span class="n">reset_file</span><span class="p">(</span><span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">)</span> <span class="p">{</span> +<a name="line-106"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"resetting file %p"</span><span class="p">,</span> <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)</span> <span class="n">file</span><span class="p">);</span> +<a name="line-107"></a> <span class="n">caja_file_info_invalidate_extension_info</span><span class="p">(</span><span class="n">file</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">static</span> <span class="n">gboolean</span> +<a name="line-111"></a><span class="n">reset_all_files</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-112"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a name="line-113"></a> +<a name="line-114"></a> <span class="cm">/* this works because you can call a function pointer with</span> +<a name="line-115"></a><span class="cm"> more arguments than it takes */</span> +<a name="line-116"></a> <span class="n">g_hash_table_foreach</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="p">(</span><span class="n">GHFunc</span><span class="p">)</span> <span class="n">reset_file</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-117"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-118"></a><span class="p">}</span> +<a name="line-119"></a> +<a name="line-120"></a> +<a name="line-121"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-122"></a><span class="n">when_file_dies</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">,</span> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">address</span><span class="p">)</span> <span class="p">{</span> +<a name="line-123"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a name="line-124"></a> +<a name="line-125"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> +<a name="line-126"></a> +<a name="line-127"></a> <span class="cm">/* we never got a change to view this file */</span> +<a name="line-128"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-129"></a> <span class="k">return</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="cm">/* too chatty */</span> +<a name="line-133"></a> <span class="cm">/* debug("removing %s <-> 0x%p", filename, address); */</span> +<a name="line-134"></a> +<a name="line-135"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-136"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> +<a name="line-137"></a><span class="p">}</span> +<a name="line-138"></a> +<a name="line-139"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-140"></a><span class="n">changed_cb</span><span class="p">(</span><span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-141"></a> <span class="cm">/* check if this file's path has changed, if so update the hash and invalidate</span> +<a name="line-142"></a><span class="cm"> the file */</span> +<a name="line-143"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">,</span> <span class="o">*</span><span class="n">pfilename</span><span class="p">;</span> +<a name="line-144"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename2</span><span class="p">;</span> +<a name="line-145"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a name="line-146"></a> +<a name="line-147"></a> <span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-148"></a> <span class="n">pfilename</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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-149"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">pfilename</span> <span class="o">?</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">)</span> <span class="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-150"></a> +<a name="line-151"></a> <span class="cm">/* Canonicalization will only null-out a non-null filename if it is invalid */</span> +<a name="line-152"></a> <span class="n">g_assert</span><span class="p">((</span><span class="n">pfilename</span> <span class="o">==</span> <span class="nb">NULL</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="o">||</span> <span class="p">(</span><span class="n">pfilename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">filename</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">));</span> +<a name="line-153"></a> +<a name="line-154"></a> <span class="n">filename2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-155"></a> +<a name="line-156"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a name="line-157"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-158"></a> +<a name="line-159"></a> <span class="cm">/* if filename2 is NULL we've never seen this file in update_file_info */</span> +<a name="line-160"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename2</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-161"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-162"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-163"></a> <span class="p">}</span> +<a name="line-164"></a> +<a name="line-165"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-166"></a> <span class="cm">/* A file has moved to offline storage. Lets remove it from our tables. */</span> +<a name="line-167"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-168"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename2</span><span class="p">);</span> +<a name="line-169"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-170"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-171"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-172"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-173"></a> <span class="p">}</span> +<a name="line-174"></a> +<a name="line-175"></a> <span class="cm">/* this is a hack, because caja doesn't do this for us, for some reason</span> +<a name="line-176"></a><span class="cm"> the file's path has changed */</span> +<a name="line-177"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">filename2</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-178"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"shifty old: %s, new %s"</span><span class="p">,</span> <span class="n">filename2</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-179"></a> +<a name="line-180"></a> <span class="cm">/* gotta do this first, the call after this frees filename2 */</span> +<a name="line-181"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename2</span><span class="p">);</span> +<a name="line-182"></a> +<a name="line-183"></a> <span class="n">g_hash_table_replace</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span> +<a name="line-184"></a> +<a name="line-185"></a> <span class="p">{</span> +<a name="line-186"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">f2</span><span class="p">;</span> +<a name="line-187"></a> <span class="cm">/* we shouldn't have another mapping from filename to an object */</span> +<a name="line-188"></a> <span class="n">f2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-189"></a> <span class="k">if</span> <span class="p">(</span><span class="n">f2</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-190"></a> <span class="cm">/* lets fix it if it's true, just remove the mapping */</span> +<a name="line-191"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-192"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">f2</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="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="n">file</span><span class="p">);</span> +<a name="line-197"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</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="n">g_free</span><span class="p">(</span><span class="n">filename</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="k">static</span> <span class="n">CajaOperationResult</span> +<a name="line-204"></a><span class="n">caja_dropbox_update_file_info</span><span class="p">(</span><span class="n">CajaInfoProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-205"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> +<a name="line-206"></a> <span class="n">GClosure</span> <span class="o">*</span><span class="n">update_complete</span><span class="p">,</span> +<a name="line-207"></a> <span class="n">CajaOperationHandle</span> <span class="o">**</span><span class="n">handle</span><span class="p">)</span> <span class="p">{</span> +<a name="line-208"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">;</span> +<a name="line-209"></a> +<a name="line-210"></a> <span class="n">cvs</span> <span class="o">=</span> <span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span> +<a name="line-211"></a> +<a name="line-212"></a> <span class="cm">/* this code adds this file object to our two-way hash of file objects</span> +<a name="line-213"></a><span class="cm"> so we can shell touch these files later */</span> +<a name="line-214"></a> <span class="p">{</span> +<a name="line-215"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">pfilename</span><span class="p">,</span> <span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a name="line-216"></a> +<a name="line-217"></a> <span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-218"></a> <span class="n">pfilename</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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-219"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-220"></a> <span class="k">if</span> <span class="p">(</span><span class="n">pfilename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-221"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a name="line-222"></a> <span class="p">}</span> +<a name="line-223"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-224"></a> <span class="kt">int</span> <span class="n">cmp</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-225"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">stored_filename</span><span class="p">;</span> +<a name="line-226"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a name="line-227"></a> +<a name="line-228"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a name="line-229"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a name="line-230"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-231"></a> <span class="cm">/* pfilename path was invalid if canonicalize operation nulled it out */</span> +<a name="line-232"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span> +<a name="line-233"></a> <span class="p">}</span> +<a name="line-234"></a> <span class="n">stored_filename</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-235"></a> +<a name="line-236"></a> <span class="cm">/* don't worry about the dup checks, gcc is smart enough to optimize this</span> +<a name="line-237"></a><span class="cm"> GCSE ftw */</span> +<a name="line-238"></a> <span class="k">if</span> <span class="p">((</span><span class="n">stored_filename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="p">(</span><span class="n">cmp</span> <span class="o">=</span> <span class="n">strcmp</span><span class="p">(</span><span class="n">stored_filename</span><span class="p">,</span> <span class="n">filename</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">||</span> +<a name="line-239"></a> <span class="n">stored_filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <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">stored_filename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">cmp</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-242"></a> <span class="cm">/* this happens when the filename changes name on a file obj</span> +<a name="line-243"></a><span class="cm"> but changed_cb isn't called */</span> +<a name="line-244"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-245"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-246"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">stored_filename</span><span class="p">);</span> +<a name="line-247"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-248"></a> <span class="p">}</span> +<a name="line-249"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">stored_filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-250"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">f2</span><span class="p">;</span> +<a name="line-251"></a> +<a name="line-252"></a> <span class="k">if</span> <span class="p">((</span><span class="n">f2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-253"></a> <span class="cm">/* if the filename exists in the filename2obj hash</span> +<a name="line-254"></a><span class="cm"> but the file obj doesn't exist in the obj2filename hash:</span> +<a name="line-255"></a> +<a name="line-256"></a><span class="cm"> this happens when caja allocates another file object</span> +<a name="line-257"></a><span class="cm"> for a filename without first deleting the original file object</span> +<a name="line-258"></a> +<a name="line-259"></a><span class="cm"> just remove the association to the older file object, it's obsolete</span> +<a name="line-260"></a><span class="cm"> */</span> +<a name="line-261"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">f2</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-262"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">f2</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-263"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-264"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">f2</span><span class="p">);</span> +<a name="line-265"></a> <span class="p">}</span> +<a name="line-266"></a> <span class="p">}</span> +<a name="line-267"></a> +<a name="line-268"></a> <span class="cm">/* too chatty */</span> +<a name="line-269"></a> <span class="cm">/* debug("adding %s <-> 0x%p", filename, file);*/</span> +<a name="line-270"></a> <span class="n">g_object_weak_ref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-271"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="n">file</span><span class="p">);</span> +<a name="line-272"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span> +<a name="line-273"></a> <span class="n">g_signal_connect</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="s">"changed"</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-274"></a> <span class="p">}</span> +<a name="line-275"></a> +<a name="line-276"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-277"></a> <span class="p">}</span> +<a name="line-278"></a> <span class="p">}</span> +<a name="line-279"></a> +<a name="line-280"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">))</span> <span class="o">==</span> <span class="n">FALSE</span> <span class="o">||</span> +<a name="line-281"></a> <span class="n">caja_file_info_is_gone</span><span class="p">(</span><span class="n">file</span><span class="p">))</span> <span class="p">{</span> +<a name="line-282"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_COMPLETE</span><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="p">{</span> +<a name="line-286"></a> <span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="n">dfic</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-287"></a> +<a name="line-288"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-289"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">provider</span> <span class="o">=</span> <span class="n">provider</span><span class="p">;</span> +<a name="line-290"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GET_FILE_INFO</span><span class="p">;</span> +<a name="line-291"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span> <span class="o">=</span> <span class="n">g_closure_ref</span><span class="p">(</span><span class="n">update_complete</span><span class="p">);</span> +<a name="line-292"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">file</span> <span class="o">=</span> <span class="n">g_object_ref</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-293"></a> +<a name="line-294"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dfic</span><span class="p">);</span> +<a name="line-295"></a> +<a name="line-296"></a> <span class="o">*</span><span class="n">handle</span> <span class="o">=</span> <span class="p">(</span><span class="n">CajaOperationHandle</span> <span class="o">*</span><span class="p">)</span> <span class="n">dfic</span><span class="p">;</span> +<a name="line-297"></a> +<a name="line-298"></a> <span class="k">return</span> <span class="n">dropbox_use_operation_in_progress_workaround</span> +<a name="line-299"></a> <span class="o">?</span> <span class="nl">CAJA_OPERATION_COMPLETE</span> +<a name="line-300"></a> <span class="p">:</span> <span class="n">CAJA_OPERATION_IN_PROGRESS</span><span class="p">;</span> +<a name="line-301"></a> <span class="p">}</span> +<a name="line-302"></a><span class="p">}</span> +<a name="line-303"></a> +<a name="line-304"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-305"></a><span class="n">handle_shell_touch</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-306"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">path</span><span class="p">;</span> +<a name="line-307"></a> +<a name="line-308"></a> <span class="c1">// debug_enter();</span> +<a name="line-309"></a> +<a name="line-310"></a> <span class="k">if</span> <span class="p">((</span><span class="n">path</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="s">"path"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a name="line-311"></a> <span class="n">path</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="o">==</span> <span class="sc">'/'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-312"></a><span class="hll"> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'file' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-313"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a name="line-314"></a> +<a name="line-315"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> +<a name="line-316"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-317"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"shell touch for %s"</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-318"></a> +<a name="line-319"></a> <span class="n">file</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-320"></a> +<a name="line-321"></a> <span class="k">if</span> <span class="p">(</span><span class="n">file</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-322"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"gonna reset %s"</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-323"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-324"></a> <span class="p">}</span> +<a name="line-325"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-326"></a> <span class="p">}</span> +<a name="line-327"></a> <span class="p">}</span> +<a name="line-328"></a> +<a name="line-329"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-330"></a><span class="p">}</span> +<a name="line-331"></a> +<a name="line-332"></a><span class="n">gboolean</span> +<a name="line-333"></a><span class="n">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span> <span class="o">*</span><span class="n">dficr</span><span class="p">)</span> <span class="p">{</span> +<a name="line-334"></a> +<a name="line-335"></a> <span class="c1">//debug_enter();</span> +<a name="line-336"></a> <span class="n">CajaOperationResult</span> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span> +<a name="line-337"></a> +<a name="line-338"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="p">)</span> <span class="p">{</span> +<a name="line-339"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">status</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-340"></a> <span class="n">gboolean</span> <span class="n">isdir</span><span class="p">;</span> +<a name="line-341"></a> +<a name="line-342"></a> <span class="n">isdir</span> <span class="o">=</span> <span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">)</span> <span class="p">;</span> +<a name="line-343"></a> +<a name="line-344"></a> <span class="cm">/* if we have emblems just use them. */</span> +<a name="line-345"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a name="line-346"></a> <span class="p">(</span><span class="n">status</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">,</span> <span class="s">"emblems"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-347"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a name="line-348"></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">status</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-349"></a> <span class="k">if</span> <span class="p">(</span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> +<a name="line-350"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-351"></a> <span class="p">}</span> +<a name="line-352"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a name="line-353"></a> <span class="p">}</span> +<a name="line-354"></a> <span class="cm">/* if the file status command went okay */</span> +<a name="line-355"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a name="line-356"></a> <span class="p">(</span><span class="n">status</span> <span class="o">=</span> +<a name="line-357"></a> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">,</span> <span class="s">"status"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&&</span> +<a name="line-358"></a> <span class="p">((</span><span class="n">isdir</span> <span class="o">==</span> <span class="n">TRUE</span> <span class="o">&&</span> +<a name="line-359"></a> <span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">||</span> <span class="n">isdir</span> <span class="o">==</span> <span class="n">FALSE</span><span class="p">))</span> <span class="p">{</span> +<a name="line-360"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">tag</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-361"></a> +<a name="line-362"></a> <span class="cm">/* set the tag emblem */</span> +<a name="line-363"></a> <span class="k">if</span> <span class="p">(</span><span class="n">isdir</span> <span class="o">&&</span> +<a name="line-364"></a> <span class="p">(</span><span class="n">tag</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">,</span> <span class="s">"tag"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-365"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-366"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"web"</span><span class="p">);</span> +<a name="line-367"></a> <span class="p">}</span> +<a name="line-368"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"shared"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-369"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"people"</span><span class="p">);</span> +<a name="line-370"></a> <span class="p">}</span> +<a name="line-371"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"photos"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-372"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"photos"</span><span class="p">);</span> +<a name="line-373"></a> <span class="p">}</span> +<a name="line-374"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"sandbox"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-375"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"star"</span><span class="p">);</span> +<a name="line-376"></a> <span class="p">}</span> +<a name="line-377"></a> <span class="p">}</span> +<a name="line-378"></a> +<a name="line-379"></a> <span class="cm">/* set the status emblem */</span> +<a name="line-380"></a> <span class="p">{</span> +<a name="line-381"></a> <span class="kt">int</span> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-382"></a> +<a name="line-383"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"up to date"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</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-384"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-385"></a> <span class="p">}</span> +<a name="line-386"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"syncing"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</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-387"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span> +<a name="line-388"></a> <span class="p">}</span> +<a name="line-389"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"unsyncable"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</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-390"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span> +<a name="line-391"></a> <span class="p">}</span> +<a name="line-392"></a> +<a name="line-393"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_code</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-394"></a> <span class="cm">/*</span> +<a name="line-395"></a><span class="cm"> debug("%s to %s", emblems[emblem_code-1],</span> +<a name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr->dfic->file),</span> +<a name="line-397"></a><span class="cm"> NULL, NULL));</span> +<a name="line-398"></a><span class="cm"> */</span> +<a name="line-399"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="n">emblems</span><span class="p">[</span><span class="n">emblem_code</span><span class="mi">-1</span><span class="p">]);</span> +<a name="line-400"></a> <span class="p">}</span> +<a name="line-401"></a> <span class="p">}</span> +<a name="line-402"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a name="line-403"></a> <span class="p">}</span> +<a name="line-404"></a> <span class="p">}</span> +<a name="line-405"></a> +<a name="line-406"></a> <span class="cm">/* complete the info request */</span> +<a name="line-407"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">)</span> <span class="p">{</span> +<a name="line-408"></a> <span class="n">caja_info_provider_update_complete_invoke</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">,</span> +<a name="line-409"></a> <span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="p">,</span> +<a name="line-410"></a> <span class="p">(</span><span class="n">CajaOperationHandle</span><span class="o">*</span><span class="p">)</span> <span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">,</span> +<a name="line-411"></a> <span class="n">result</span><span class="p">);</span> +<a name="line-412"></a> <span class="p">}</span> +<a name="line-413"></a> +<a name="line-414"></a> <span class="cm">/* destroy the objects we created */</span> +<a name="line-415"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-416"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">);</span> +<a name="line-417"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-418"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">);</span> +<a name="line-419"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-420"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">);</span> +<a name="line-421"></a> +<a name="line-422"></a> <span class="cm">/* unref the objects we didn't create */</span> +<a name="line-423"></a> <span class="n">g_closure_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">);</span> +<a name="line-424"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span> +<a name="line-425"></a> +<a name="line-426"></a> <span class="cm">/* now free the structs */</span> +<a name="line-427"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">);</span> +<a name="line-428"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="p">);</span> +<a name="line-429"></a> +<a name="line-430"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-431"></a><span class="p">}</span> +<a name="line-432"></a> +<a name="line-433"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-434"></a><span class="n">caja_dropbox_cancel_update</span><span class="p">(</span><span class="n">CajaInfoProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-435"></a> <span class="n">CajaOperationHandle</span> <span class="o">*</span><span class="n">handle</span><span class="p">)</span> <span class="p">{</span> +<a name="line-436"></a> <span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="n">dfic</span> <span class="o">=</span> <span class="p">(</span><span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">handle</span><span class="p">;</span> +<a name="line-437"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-438"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-439"></a><span class="p">}</span> +<a name="line-440"></a> +<a name="line-441"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-442"></a><span class="n">menu_item_cb</span><span class="p">(</span><span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">,</span> +<a name="line-443"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-444"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">verb</span><span class="p">;</span> +<a name="line-445"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">;</span> +<a name="line-446"></a> <span class="n">DropboxGeneralCommand</span> <span class="o">*</span><span class="n">dcac</span><span class="p">;</span> +<a name="line-447"></a> +<a name="line-448"></a> <span class="n">dcac</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-449"></a> +<a name="line-450"></a> <span class="cm">/* maybe these would be better passed in a container</span> +<a name="line-451"></a><span class="cm"> struct used as the userdata pointer, oh well this</span> +<a name="line-452"></a><span class="cm"> is how dave camp does it */</span> +<a name="line-453"></a> <span class="n">files</span> <span class="o">=</span> <span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_files"</span><span class="p">);</span> +<a name="line-454"></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_verb"</span><span class="p">);</span> +<a name="line-455"></a> +<a name="line-456"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a name="line-457"></a> +<a name="line-458"></a> <span class="cm">/* build the argument list */</span> +<a name="line-459"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-460"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-461"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-462"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_strfreev</span><span class="p">);</span> +<a name="line-463"></a> <span class="p">{</span> +<a name="line-464"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">arglist</span><span class="p">;</span> +<a name="line-465"></a> <span class="n">guint</span> <span class="n">i</span><span class="p">;</span> +<a name="line-466"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">li</span><span class="p">;</span> +<a name="line-467"></a> +<a name="line-468"></a> <span class="n">arglist</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-469"></a> +<a name="line-470"></a> <span class="k">for</span> <span class="p">(</span><span class="n">li</span> <span class="o">=</span> <span class="n">files</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">li</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">li</span> <span class="o">=</span> <span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span> <span class="p">{</span> +<a name="line-471"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">CAJA_FILE_INFO</span><span class="p">(</span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">));</span> +<a name="line-472"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">path</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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-473"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-474"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">path</span><span class="p">)</span> +<a name="line-475"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-476"></a> <span class="n">arglist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">path</span><span class="p">;</span> +<a name="line-477"></a> <span class="n">i</span><span class="o">++</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="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> +<a name="line-481"></a> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span> +<a name="line-482"></a> <span class="n">arglist</span><span class="p">);</span> +<a name="line-483"></a> <span class="p">}</span> +<a name="line-484"></a> +<a name="line-485"></a> <span class="p">{</span> +<a name="line-486"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">arglist</span><span class="p">;</span> +<a name="line-487"></a> <span class="n">arglist</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> +<a name="line-488"></a> <span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">);</span> +<a name="line-489"></a> <span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-490"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"verb"</span><span class="p">),</span> <span class="n">arglist</span><span class="p">);</span> +<a name="line-491"></a> <span class="p">}</span> +<a name="line-492"></a> +<a name="line-493"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_action"</span><span class="p">);</span> +<a name="line-494"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">handler</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-495"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">handler_ud</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-496"></a> +<a name="line-497"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dcac</span><span class="p">);</span> +<a name="line-498"></a><span class="p">}</span> +<a name="line-499"></a> +<a name="line-500"></a><span class="k">static</span> <span class="kt">char</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">gchar</span> <span class="n">ch</span><span class="p">)</span> <span class="p">{</span> +<a name="line-501"></a> <span class="k">return</span> <span class="nf">isdigit</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="o">?</span> <span class="n">ch</span> <span class="o">-</span> <span class="sc">'0'</span> <span class="o">:</span> <span class="n">tolower</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="o">-</span> <span class="sc">'a'</span> <span class="o">+</span> <span class="mi">10</span><span class="p">;</span> +<a name="line-502"></a><span class="p">}</span> +<a name="line-503"></a> +<a name="line-504"></a><span class="c1">// decode in --> out, but dont fill more than n chars into out</span> +<a name="line-505"></a><span class="c1">// returns len of out if thing went well, -1 if n wasn't big enough</span> +<a name="line-506"></a><span class="c1">// can be used in place (whoa!)</span> +<a name="line-507"></a><span class="kt">int</span> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">gchar</span><span class="o">*</span> <span class="n">out</span><span class="p">,</span> <span class="n">gchar</span><span class="o">*</span> <span class="n">in</span><span class="p">,</span> <span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> +<a name="line-508"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">out_initial</span><span class="p">;</span> +<a name="line-509"></a> +<a name="line-510"></a> <span class="k">for</span><span class="p">(</span><span class="n">out_initial</span> <span class="o">=</span> <span class="n">out</span><span class="p">;</span> <span class="n">out</span><span class="o">-</span><span class="n">out_initial</span> <span class="o"><</span> <span class="n">n</span> <span class="o">&&</span> <span class="o">*</span><span class="n">in</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">;</span> <span class="n">out</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-511"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">in</span> <span class="o">==</span> <span class="sc">'%'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-512"></a> <span class="k">if</span> <span class="p">((</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">))</span> <span class="p">{</span> +<a name="line-513"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o"><<</span> <span class="mi">4</span> <span class="o">|</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span> +<a name="line-514"></a> <span class="n">in</span> <span class="o">+=</span> <span class="mi">3</span><span class="p">;</span> +<a name="line-515"></a> <span class="p">}</span> +<a name="line-516"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-517"></a> <span class="c1">// Input string isn't well-formed</span> +<a name="line-518"></a> <span class="k">return</span> <span class="mi">-1</span><span class="p">;</span> +<a name="line-519"></a> <span class="p">}</span> +<a name="line-520"></a> <span class="p">}</span> +<a name="line-521"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-522"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="o">*</span><span class="n">in</span><span class="p">;</span> +<a name="line-523"></a> <span class="n">in</span><span class="o">++</span><span class="p">;</span> +<a name="line-524"></a> <span class="p">}</span> +<a name="line-525"></a> <span class="p">}</span> +<a name="line-526"></a> +<a name="line-527"></a> <span class="k">if</span> <span class="p">(</span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span> <span class="o"><</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> +<a name="line-528"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> +<a name="line-529"></a> <span class="k">return</span> <span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="p">;</span> +<a name="line-530"></a> <span class="p">}</span> +<a name="line-531"></a> <span class="k">return</span> <span class="mi">-1</span><span class="p">;</span> +<a name="line-532"></a><span class="p">}</span> +<a name="line-533"></a> +<a name="line-534"></a><span class="k">static</span> <span class="kt">int</span> +<a name="line-535"></a><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">gchar</span> <span class="o">**</span><span class="n">options</span><span class="p">,</span> +<a name="line-536"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">menu</span><span class="p">,</span> +<a name="line-537"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">old_action_string</span><span class="p">,</span> +<a name="line-538"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">toret</span><span class="p">,</span> +<a name="line-539"></a> <span class="n">CajaMenuProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-540"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">)</span> +<a name="line-541"></a><span class="p">{</span> +<a name="line-542"></a> <span class="kt">int</span> <span class="n">ret</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-543"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a name="line-544"></a> +<a name="line-545"></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">options</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-546"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">option_info</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">"~"</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span> +<a name="line-547"></a> <span class="cm">/* if this is a valid string */</span> +<a name="line-548"></a> <span class="k">if</span> <span class="p">(</span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> +<a name="line-549"></a> <span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-550"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span> +<a name="line-551"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-552"></a> <span class="p">}</span> +<a name="line-553"></a> +<a name="line-554"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">item_name</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> +<a name="line-555"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">item_inner</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> +<a name="line-556"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">verb</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> +<a name="line-557"></a> +<a name="line-558"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_name</span><span class="p">,</span> <span class="n">item_name</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">item_name</span><span class="p">));</span> +<a name="line-559"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">verb</span><span class="p">));</span> +<a name="line-560"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="n">item_inner</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">item_inner</span><span class="p">));</span> +<a name="line-561"></a> +<a name="line-562"></a> <span class="c1">// If the inner section has a menu in it then we create a submenu. The verb will be ignored.</span> +<a name="line-563"></a> <span class="c1">// Otherwise add the verb to our map and add the menu item to the list.</span> +<a name="line-564"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="sc">'~'</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-565"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">new_action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span> +<a name="line-566"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">suboptions</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="s">"|"</span><span class="p">,</span> <span class="mi">-1</span><span class="p">);</span> +<a name="line-567"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">;</span> +<a name="line-568"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">submenu</span> <span class="o">=</span> <span class="n">caja_menu_new</span><span class="p">();</span> +<a name="line-569"></a> +<a name="line-570"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">item_name</span><span class="p">);</span> +<a name="line-571"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="s">"::"</span><span class="p">);</span> +<a name="line-572"></a> +<a name="line-573"></a> <span class="n">ret</span> <span class="o">+=</span> <span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">suboptions</span><span class="p">,</span> <span class="n">submenu</span><span class="p">,</span> <span class="n">new_action_string</span><span class="p">,</span> +<a name="line-574"></a> <span class="n">toret</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">files</span><span class="p">);</span> +<a name="line-575"></a> +<a name="line-576"></a> <span class="n">item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span> +<a name="line-577"></a> <span class="n">item_name</span><span class="p">,</span> <span class="s">""</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-578"></a> <span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">submenu</span><span class="p">);</span> +<a name="line-579"></a> <span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span> <span class="n">item</span><span class="p">);</span> +<a name="line-580"></a> +<a name="line-581"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">suboptions</span><span class="p">);</span> +<a name="line-582"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> +<a name="line-583"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">submenu</span><span class="p">);</span> +<a name="line-584"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-585"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-586"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">;</span> +<a name="line-587"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">new_action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span> +<a name="line-588"></a> <span class="n">gboolean</span> <span class="n">grayed_out</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-589"></a> +<a name="line-590"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">verb</span><span class="p">);</span> +<a name="line-591"></a> +<a name="line-592"></a> <span class="k">if</span> <span class="p">(</span><span class="n">item_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'!'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-593"></a> <span class="n">item_name</span><span class="o">++</span><span class="p">;</span> +<a name="line-594"></a> <span class="n">grayed_out</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-595"></a> <span class="p">}</span> +<a name="line-596"></a> +<a name="line-597"></a> <span class="n">item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span> <span class="n">item_name</span><span class="p">,</span> <span class="n">item_inner</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-598"></a> +<a name="line-599"></a> <span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span> <span class="n">item</span><span class="p">);</span> +<a name="line-600"></a> <span class="cm">/* add the file metadata to this item */</span> +<a name="line-601"></a> <span class="n">g_object_set_data_full</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_files"</span><span class="p">,</span> +<a name="line-602"></a> <span class="n">caja_file_info_list_copy</span> <span class="p">(</span><span class="n">files</span><span class="p">),</span> +<a name="line-603"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">caja_file_info_list_free</span><span class="p">);</span> +<a name="line-604"></a> <span class="cm">/* add the verb metadata */</span> +<a name="line-605"></a> <span class="n">g_object_set_data_full</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_verb"</span><span class="p">,</span> +<a name="line-606"></a> <span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">),</span> +<a name="line-607"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">);</span> +<a name="line-608"></a> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s">"activate"</span><span class="p">,</span> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">menu_item_cb</span><span class="p">),</span> <span class="n">provider</span><span class="p">);</span> +<a name="line-609"></a> +<a name="line-610"></a> <span class="k">if</span> <span class="p">(</span><span class="n">grayed_out</span><span class="p">)</span> <span class="p">{</span> +<a name="line-611"></a> <span class="n">GValue</span> <span class="n">sensitive</span> <span class="o">=</span> <span class="p">{</span> <span class="mi">0</span> <span class="p">};</span> +<a name="line-612"></a> <span class="n">g_value_init</span> <span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span> <span class="n">G_TYPE_BOOLEAN</span><span class="p">);</span> +<a name="line-613"></a> <span class="n">g_value_set_boolean</span> <span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-614"></a> <span class="n">g_object_set_property</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"sensitive"</span><span class="p">,</span> <span class="o">&</span><span class="n">sensitive</span><span class="p">);</span> +<a name="line-615"></a> <span class="p">}</span> +<a name="line-616"></a> +<a name="line-617"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> +<a name="line-618"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-619"></a> <span class="n">ret</span><span class="o">++</span><span class="p">;</span> +<a name="line-620"></a> <span class="p">}</span> +<a name="line-621"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span> +<a name="line-622"></a> <span class="p">}</span> +<a name="line-623"></a> <span class="k">return</span> <span class="n">ret</span><span class="p">;</span> +<a name="line-624"></a><span class="p">}</span> +<a name="line-625"></a> +<a name="line-626"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-627"></a><span class="n">get_file_items_callback</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">response</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">)</span> +<a name="line-628"></a><span class="p">{</span> +<a name="line-629"></a> <span class="n">GAsyncQueue</span> <span class="o">*</span><span class="n">reply_queue</span> <span class="o">=</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-630"></a> +<a name="line-631"></a> <span class="cm">/* queue_push doesn't accept NULL as a value so we create an empty hash table</span> +<a name="line-632"></a><span class="cm"> * if we got no response. */</span> +<a name="line-633"></a> <span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span> <span class="n">response</span> <span class="o">?</span> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">response</span><span class="p">)</span> <span class="o">:</span> +<a name="line-634"></a> <span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">));</span> +<a name="line-635"></a> <span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a name="line-636"></a><span class="p">}</span> +<a name="line-637"></a> +<a name="line-638"></a> +<a name="line-639"></a><span class="k">static</span> <span class="n">GList</span> <span class="o">*</span> +<a name="line-640"></a><span class="n">caja_dropbox_get_file_items</span><span class="p">(</span><span class="n">CajaMenuProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-641"></a> <span class="n">GtkWidget</span> <span class="o">*</span><span class="n">window</span><span class="p">,</span> +<a name="line-642"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">)</span> +<a name="line-643"></a><span class="p">{</span> +<a name="line-644"></a> <span class="cm">/*</span> +<a name="line-645"></a><span class="cm"> * 1. Convert files to filenames.</span> +<a name="line-646"></a><span class="cm"> */</span> +<a name="line-647"></a> <span class="kt">int</span> <span class="n">file_count</span> <span class="o">=</span> <span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">);</span> +<a name="line-648"></a> +<a name="line-649"></a> <span class="k">if</span> <span class="p">(</span><span class="n">file_count</span> <span class="o"><</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-650"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-651"></a> +<a name="line-652"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">paths</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="n">file_count</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-653"></a> <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-654"></a> <span class="n">GList</span><span class="o">*</span> <span class="n">elem</span><span class="p">;</span> +<a name="line-655"></a> +<a name="line-656"></a> <span class="k">for</span> <span class="p">(</span><span class="n">elem</span> <span class="o">=</span> <span class="n">files</span><span class="p">;</span> <span class="n">elem</span><span class="p">;</span> <span class="n">elem</span> <span class="o">=</span> <span class="n">elem</span><span class="o">-></span><span class="n">next</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-657"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">elem</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> +<a name="line-658"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename_un</span> <span class="o">=</span> <span class="n">uri</span> <span class="o">?</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-659"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span> <span class="o">=</span> <span class="n">filename_un</span> <span class="o">?</span> <span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</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> <span class="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-660"></a> +<a name="line-661"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-662"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span> +<a name="line-663"></a> +<a name="line-664"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-665"></a> <span class="cm">/* oooh, filename wasn't correctly encoded, or isn't a local file. */</span> +<a name="line-666"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span> +<a name="line-667"></a> <span class="k">return</span> <span class="nb">NULL</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="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">filename</span><span class="p">;</span> +<a name="line-671"></a> <span class="p">}</span> +<a name="line-672"></a> +<a name="line-673"></a> <span class="n">GAsyncQueue</span> <span class="o">*</span><span class="n">reply_queue</span> <span class="o">=</span> <span class="n">g_async_queue_new_full</span><span class="p">((</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="n">g_hash_table_unref</span><span class="p">);</span> +<a name="line-674"></a> +<a name="line-675"></a> <span class="cm">/*</span> +<a name="line-676"></a><span class="cm"> * 2. Create a DropboxGeneralCommand to call "icon_overlay_context_options"</span> +<a name="line-677"></a><span class="cm"> */</span> +<a name="line-678"></a> +<a name="line-679"></a> <span class="n">DropboxGeneralCommand</span> <span class="o">*</span><span class="n">dgc</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-680"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a name="line-681"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_options"</span><span class="p">);</span> +<a name="line-682"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-683"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-684"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-685"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_strfreev</span><span class="p">);</span> +<a name="line-686"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span> <span class="n">paths</span><span class="p">);</span> +<a name="line-687"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">handler</span> <span class="o">=</span> <span class="n">get_file_items_callback</span><span class="p">;</span> +<a name="line-688"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span> <span class="o">=</span> <span class="n">g_async_queue_ref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a name="line-689"></a> +<a name="line-690"></a> <span class="cm">/*</span> +<a name="line-691"></a><span class="cm"> * 3. Queue it up for the helper thread to run it.</span> +<a name="line-692"></a><span class="cm"> */</span> +<a name="line-693"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span> <span class="o">=</span> <span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span> +<a name="line-694"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dgc</span><span class="p">);</span> +<a name="line-695"></a> +<a name="line-696"></a> <span class="cm">/*</span> +<a name="line-697"></a><span class="cm"> * 4. We have to block until it's done because caja expects a reply. But we will</span> +<a name="line-698"></a><span class="cm"> * only block for 50 ms for a reply.</span> +<a name="line-699"></a><span class="cm"> */</span> +<a name="line-700"></a> +<a name="line-701"></a> <span class="n">GHashTable</span> <span class="o">*</span><span class="n">context_options_response</span> <span class="o">=</span> <span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span> <span class="mi">50000</span><span class="p">);</span> +<a name="line-702"></a> <span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</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">context_options_response</span><span class="p">)</span> <span class="p">{</span> +<a name="line-705"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-706"></a> <span class="p">}</span> +<a name="line-707"></a> +<a name="line-708"></a> <span class="cm">/*</span> +<a name="line-709"></a><span class="cm"> * 5. Parse the reply.</span> +<a name="line-710"></a><span class="cm"> */</span> +<a name="line-711"></a> +<a name="line-712"></a> <span class="kt">char</span> <span class="o">**</span><span class="n">options</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">,</span> <span class="s">"options"</span><span class="p">);</span> +<a name="line-713"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-714"></a> +<a name="line-715"></a> <span class="k">if</span> <span class="p">(</span><span class="n">options</span> <span class="o">&&</span> <span class="o">*</span><span class="n">options</span> <span class="o">&&</span> <span class="o">**</span><span class="n">options</span><span class="p">)</span> <span class="p">{</span> +<a name="line-716"></a> <span class="cm">/* build the menu */</span> +<a name="line-717"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">root_item</span><span class="p">;</span> +<a name="line-718"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">root_menu</span><span class="p">;</span> +<a name="line-719"></a> +<a name="line-720"></a> <span class="n">root_menu</span> <span class="o">=</span> <span class="n">caja_menu_new</span><span class="p">();</span> +<a name="line-721"></a> <span class="n">root_item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="s">"CajaDropbox::root_item"</span><span class="p">,</span> +<a name="line-722"></a> <span class="s">"Dropbox"</span><span class="p">,</span> <span class="s">"Dropbox Options"</span><span class="p">,</span> <span class="s">"dropbox"</span><span class="p">);</span> +<a name="line-723"></a> +<a name="line-724"></a> <span class="n">toret</span> <span class="o">=</span> <span class="n">g_list_append</span><span class="p">(</span><span class="n">toret</span><span class="p">,</span> <span class="n">root_item</span><span class="p">);</span> +<a name="line-725"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="s">"CajaDropbox::"</span><span class="p">);</span> +<a name="line-726"></a> +<a name="line-727"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">root_menu</span><span class="p">,</span> <span class="n">action_string</span><span class="p">,</span> +<a name="line-728"></a> <span class="n">toret</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">files</span><span class="p">))</span> <span class="p">{</span> +<a name="line-729"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">toret</span><span class="p">);</span> +<a name="line-730"></a> <span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-731"></a> <span class="p">}</span> +<a name="line-732"></a> +<a name="line-733"></a> <span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">root_item</span><span class="p">,</span> <span class="n">root_menu</span><span class="p">);</span> +<a name="line-734"></a> +<a name="line-735"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-736"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">root_menu</span><span class="p">);</span> +<a name="line-737"></a> <span class="p">}</span> +<a name="line-738"></a> +<a name="line-739"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">);</span> +<a name="line-740"></a> +<a name="line-741"></a> <span class="k">return</span> <span class="n">toret</span><span class="p">;</span> +<a name="line-742"></a><span class="p">}</span> +<a name="line-743"></a> +<a name="line-744"></a><span class="n">gboolean</span> +<a name="line-745"></a><span class="n">add_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span> <span class="n">emblem_paths_response</span><span class="p">)</span> +<a name="line-746"></a><span class="p">{</span> +<a name="line-747"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a name="line-748"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="error2"><--- Assuming that condition '!emblem_paths_response' is not redundant</span> +</span><a name="line-749"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-750"></a> +<a name="line-751"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">emblem_paths_list</span><span class="p">;</span> +<a name="line-752"></a><span class="hll"> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-753"></a> +<a name="line-754"></a> <span class="n">GtkIconTheme</span> <span class="o">*</span><span class="n">theme</span> <span class="o">=</span> <span class="n">gtk_icon_theme_get_default</span><span class="p">();</span> +<a name="line-755"></a> +<a name="line-756"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_response</span> <span class="o">&&</span><span class="error2"><--- Condition 'emblem_paths_response' is always true</span> +</span><a name="line-757"></a> <span class="p">(</span><span class="n">emblem_paths_list</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">)))</span> <span class="p">{</span> +<a name="line-758"></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">emblem_paths_list</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-759"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> +<a name="line-760"></a> <span class="n">gtk_icon_theme_append_search_path</span><span class="p">(</span><span class="n">theme</span><span class="p">,</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-761"></a> <span class="p">}</span> +<a name="line-762"></a> <span class="p">}</span> +<a name="line-763"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a name="line-764"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-765"></a><span class="p">}</span> +<a name="line-766"></a> +<a name="line-767"></a><span class="n">gboolean</span> +<a name="line-768"></a><span class="n">remove_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span> <span class="n">emblem_paths_response</span><span class="p">)</span> +<a name="line-769"></a><span class="p">{</span> +<a name="line-770"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a name="line-771"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span> +<a name="line-772"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-773"></a> +<a name="line-774"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">emblem_paths_list</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">);</span> +<a name="line-775"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_list</span><span class="p">)</span> +<a name="line-776"></a> <span class="k">goto</span> <span class="n">exit</span><span class="p">;</span> +<a name="line-777"></a> +<a name="line-778"></a> <span class="c1">// We need to remove the old paths.</span> +<a name="line-779"></a> <span class="n">GtkIconTheme</span> <span class="o">*</span> <span class="n">icon_theme</span> <span class="o">=</span> <span class="n">gtk_icon_theme_get_default</span><span class="p">();</span> +<a name="line-780"></a> <span class="n">gchar</span> <span class="o">**</span> <span class="n">paths</span><span class="p">;</span> +<a name="line-781"></a> <span class="n">gint</span> <span class="n">path_count</span><span class="p">;</span> +<a name="line-782"></a> +<a name="line-783"></a> <span class="n">gtk_icon_theme_get_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span> <span class="o">&</span><span class="n">paths</span><span class="p">,</span> <span class="o">&</span><span class="n">path_count</span><span class="p">);</span> +<a name="line-784"></a> +<a name="line-785"></a> <span class="n">gint</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-786"></a> <span class="n">gboolean</span> <span class="n">found</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-787"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">path_count</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-788"></a> <span class="n">gboolean</span> <span class="n">keep</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-789"></a> <span class="k">for</span> <span class="p">(</span><span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">j</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-790"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="p">{</span> +<a name="line-791"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">g_strcmp0</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span> <span class="p">{</span> +<a name="line-792"></a> <span class="n">found</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-793"></a> <span class="n">keep</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-794"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-795"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-796"></a> <span class="p">}</span> +<a name="line-797"></a> <span class="p">}</span> +<a name="line-798"></a> <span class="p">}</span> +<a name="line-799"></a> <span class="k">if</span> <span class="p">(</span><span class="n">keep</span><span class="p">)</span> <span class="p">{</span> +<a name="line-800"></a> <span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span> <span class="o">=</span> <span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a name="line-801"></a> <span class="n">out</span><span class="o">++</span><span class="p">;</span> +<a name="line-802"></a> <span class="p">}</span> +<a name="line-803"></a> <span class="p">}</span> +<a name="line-804"></a> +<a name="line-805"></a> <span class="cm">/* If we found one we need to reset the path to</span> +<a name="line-806"></a><span class="cm"> accomodate the changes */</span> +<a name="line-807"></a> <span class="k">if</span> <span class="p">(</span><span class="n">found</span><span class="p">)</span> <span class="p">{</span> +<a name="line-808"></a> <span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="cm">/* Clear the last one */</span> +<a name="line-809"></a> <span class="n">gtk_icon_theme_set_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span> <span class="p">(</span><span class="k">const</span> <span class="n">gchar</span> <span class="o">**</span><span class="p">)</span><span class="n">paths</span><span class="p">,</span> <span class="n">out</span><span class="p">);</span> +<a name="line-810"></a> <span class="p">}</span> +<a name="line-811"></a> +<a name="line-812"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span> +<a name="line-813"></a><span class="nl">exit</span><span class="p">:</span> +<a name="line-814"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a name="line-815"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-816"></a><span class="p">}</span> +<a name="line-817"></a> +<a name="line-818"></a><span class="kt">void</span> <span class="n">get_emblem_paths_cb</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> +<a name="line-819"></a><span class="p">{</span> +<a name="line-820"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span> <span class="p">{</span> +<a name="line-821"></a> <span class="n">emblem_paths_response</span> <span class="o">=</span> <span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-822"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">);</span> +<a name="line-823"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">,</span> <span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">);</span> +<a name="line-824"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-825"></a> <span class="cm">/* Increase the ref so that finish_general_command doesn't delete it. */</span> +<a name="line-826"></a> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a name="line-827"></a> <span class="p">}</span> +<a name="line-828"></a> +<a name="line-829"></a> <span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-830"></a> <span class="k">if</span> <span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">)</span> <span class="p">{</span> +<a name="line-831"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">remove_emblem_paths</span><span class="p">,</span> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span> +<a name="line-832"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-833"></a> <span class="p">}</span> +<a name="line-834"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="n">emblem_paths_response</span><span class="p">;</span> +<a name="line-835"></a> <span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-836"></a> +<a name="line-837"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">add_emblem_paths</span><span class="p">,</span> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">));</span> +<a name="line-838"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">reset_all_files</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-839"></a><span class="p">}</span> +<a name="line-840"></a> +<a name="line-841"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-842"></a><span class="n">on_connect</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-843"></a> <span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span> +<a name="line-844"></a> +<a name="line-845"></a> <span class="n">dropbox_command_client_send_command</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> +<a name="line-846"></a> <span class="p">(</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)</span> <span class="n">get_emblem_paths_cb</span><span class="p">,</span> +<a name="line-847"></a><span class="hll"> <span class="n">cvs</span><span class="p">,</span> <span class="s">"get_emblem_paths"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span><div class="verbose expandable"><span class="error2"><--- Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. <span class="marker">[+]</span></span><div class="content">Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. +The C99 standard, in section 7.15.1.1, states that if the type used by va_arg() is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined. +The value of the NULL macro is an implementation-defined null pointer constant (7.17), which can be any integer constant expression with the value 0, or such an expression casted to (void*) (6.3.2.3). This includes values like 0, 0L, or even 0LL. +In practice on common architectures, this will cause real crashes if sizeof(int) != sizeof(void*), and NULL is defined to 0 or any other null pointer constant that promotes to int. +To reproduce you might be able to use this little code example on 64bit platforms. If the output includes "ERROR", the sentinel had only 4 out of 8 bytes initialized to zero and was not detected as the final argument to stop argument processing via va_arg(). Changing the 0 to (void*)0 or 0L will make the "ERROR" output go away. +#include <stdarg.h> +#include <stdio.h> + +void f(char *s, ...) { + va_list ap; + va_start(ap,s); + for (;;) { + char *p = va_arg(ap,char*); + printf("%018p, %s\n", p, (long)p & 255 ? p : ""); + if(!p) break; + } + va_end(ap); +} + +void g() { + char *s2 = "x"; + char *s3 = "ERROR"; + + // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64 + f("first", s2, s2, s2, s2, s2, 0, s3, (char*)0); +} + +void h() { + int i; + volatile unsigned char a[1000]; + for (i = 0; i<sizeof(a); i++) + a[i] = -1; +} + +int main() { + h(); + g(); + return 0; +}</div></div> +</span><a name="line-848"></a><span class="p">}</span> +<a name="line-849"></a> +<a name="line-850"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-851"></a><span class="n">on_disconnect</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-852"></a> <span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span> +<a name="line-853"></a> +<a name="line-854"></a> <span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-855"></a> <span class="cm">/* This call will free the data too. */</span> +<a name="line-856"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">remove_emblem_paths</span><span class="p">,</span> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span> +<a name="line-857"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-858"></a> <span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-859"></a><span class="p">}</span> +<a name="line-860"></a> +<a name="line-861"></a> +<a name="line-862"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-863"></a><span class="n">caja_dropbox_menu_provider_iface_init</span> <span class="p">(</span><span class="n">CajaMenuProviderIface</span> <span class="o">*</span><span class="n">iface</span><span class="p">)</span> <span class="p">{</span> +<a name="line-864"></a> <span class="n">iface</span><span class="o">-></span><span class="n">get_file_items</span> <span class="o">=</span> <span class="n">caja_dropbox_get_file_items</span><span class="p">;</span> +<a name="line-865"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-866"></a><span class="p">}</span> +<a name="line-867"></a> +<a name="line-868"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-869"></a><span class="n">caja_dropbox_info_provider_iface_init</span> <span class="p">(</span><span class="n">CajaInfoProviderIface</span> <span class="o">*</span><span class="n">iface</span><span class="p">)</span> <span class="p">{</span> +<a name="line-870"></a> <span class="n">iface</span><span class="o">-></span><span class="n">update_file_info</span> <span class="o">=</span> <span class="n">caja_dropbox_update_file_info</span><span class="p">;</span> +<a name="line-871"></a> <span class="n">iface</span><span class="o">-></span><span class="n">cancel_update</span> <span class="o">=</span> <span class="n">caja_dropbox_cancel_update</span><span class="p">;</span> +<a name="line-872"></a> <span class="k">return</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">static</span> <span class="kt">void</span> +<a name="line-876"></a><span class="n">caja_dropbox_instance_init</span> <span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-877"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-878"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-879"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-880"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-881"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_direct_hash</span><span class="p">,</span> +<a name="line-882"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_direct_equal</span><span class="p">,</span> +<a name="line-883"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-884"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">);</span> +<a name="line-885"></a> <span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-886"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-887"></a> +<a name="line-888"></a> <span class="cm">/* setup the connection obj*/</span> +<a name="line-889"></a> <span class="n">dropbox_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span> +<a name="line-890"></a> +<a name="line-891"></a> <span class="cm">/* our hooks */</span> +<a name="line-892"></a> <span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span> <span class="s">"shell_touch"</span><span class="p">,</span> +<a name="line-893"></a> <span class="p">(</span><span class="n">DropboxUpdateHook</span><span class="p">)</span> <span class="n">handle_shell_touch</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-894"></a> +<a name="line-895"></a> <span class="cm">/* add connection handlers */</span> +<a name="line-896"></a> <span class="n">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span> +<a name="line-897"></a> <span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span> <span class="n">on_connect</span><span class="p">,</span> +<a name="line-898"></a> <span class="n">cvs</span><span class="p">);</span> +<a name="line-899"></a> <span class="n">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span> +<a name="line-900"></a> <span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span> <span class="n">on_disconnect</span><span class="p">,</span> +<a name="line-901"></a> <span class="n">cvs</span><span class="p">);</span> +<a name="line-902"></a> +<a name="line-903"></a> <span class="cm">/* now start the connection */</span> +<a name="line-904"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"about to start client connection"</span><span class="p">);</span> +<a name="line-905"></a> <span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span> +<a name="line-906"></a> +<a name="line-907"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-908"></a><span class="p">}</span> +<a name="line-909"></a> +<a name="line-910"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-911"></a><span class="n">caja_dropbox_class_init</span> <span class="p">(</span><span class="n">CajaDropboxClass</span> <span class="o">*</span><span class="n">class</span><span class="p">)</span> <span class="p">{</span> +<a name="line-912"></a><span class="p">}</span> +<a name="line-913"></a> +<a name="line-914"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-915"></a><span class="n">caja_dropbox_class_finalize</span> <span class="p">(</span><span class="n">CajaDropboxClass</span> <span class="o">*</span><span class="n">class</span><span class="p">)</span> <span class="p">{</span> +<a name="line-916"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"just checking"</span><span class="p">);</span> +<a name="line-917"></a> <span class="cm">/* kill threads here? */</span> +<a name="line-918"></a><span class="p">}</span> +<a name="line-919"></a> +<a name="line-920"></a><span class="n">GType</span> +<a name="line-921"></a><span class="n">caja_dropbox_get_type</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span> +<a name="line-922"></a> <span class="k">return</span> <span class="n">dropbox_type</span><span class="p">;</span> +<a name="line-923"></a><span class="p">}</span> +<a name="line-924"></a> +<a name="line-925"></a><span class="kt">void</span> +<a name="line-926"></a><span class="n">caja_dropbox_register_type</span> <span class="p">(</span><span class="n">GTypeModule</span> <span class="o">*</span><span class="n">module</span><span class="p">)</span> <span class="p">{</span> +<a name="line-927"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GTypeInfo</span> <span class="n">info</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-928"></a> <span class="k">sizeof</span> <span class="p">(</span><span class="n">CajaDropboxClass</span><span class="p">),</span> +<a name="line-929"></a> <span class="p">(</span><span class="n">GBaseInitFunc</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-930"></a> <span class="p">(</span><span class="n">GBaseFinalizeFunc</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-931"></a> <span class="p">(</span><span class="n">GClassInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_class_init</span><span class="p">,</span> +<a name="line-932"></a> <span class="p">(</span><span class="n">GClassFinalizeFunc</span><span class="p">)</span> <span class="n">caja_dropbox_class_finalize</span><span class="p">,</span> +<a name="line-933"></a> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-934"></a> <span class="k">sizeof</span> <span class="p">(</span><span class="n">CajaDropbox</span><span class="p">),</span> +<a name="line-935"></a> <span class="mi">0</span><span class="p">,</span> +<a name="line-936"></a> <span class="p">(</span><span class="n">GInstanceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_instance_init</span><span class="p">,</span> +<a name="line-937"></a> <span class="p">};</span> +<a name="line-938"></a> +<a name="line-939"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GInterfaceInfo</span> <span class="n">menu_provider_iface_info</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-940"></a> <span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_menu_provider_iface_init</span><span class="p">,</span> +<a name="line-941"></a> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-942"></a> <span class="nb">NULL</span> +<a name="line-943"></a> <span class="p">};</span> +<a name="line-944"></a> +<a name="line-945"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GInterfaceInfo</span> <span class="n">info_provider_iface_info</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-946"></a> <span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_info_provider_iface_init</span><span class="p">,</span> +<a name="line-947"></a> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-948"></a> <span class="nb">NULL</span> +<a name="line-949"></a> <span class="p">};</span> +<a name="line-950"></a> +<a name="line-951"></a> <span class="n">dropbox_type</span> <span class="o">=</span> +<a name="line-952"></a> <span class="n">g_type_module_register_type</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a name="line-953"></a> <span class="n">G_TYPE_OBJECT</span><span class="p">,</span> +<a name="line-954"></a> <span class="s">"CajaDropbox"</span><span class="p">,</span> +<a name="line-955"></a> <span class="o">&</span><span class="n">info</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-956"></a> +<a name="line-957"></a> <span class="n">g_type_module_add_interface</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a name="line-958"></a> <span class="n">dropbox_type</span><span class="p">,</span> +<a name="line-959"></a> <span class="n">CAJA_TYPE_MENU_PROVIDER</span><span class="p">,</span> +<a name="line-960"></a> <span class="o">&</span><span class="n">menu_provider_iface_info</span><span class="p">);</span> +<a name="line-961"></a> +<a name="line-962"></a> <span class="n">g_type_module_add_interface</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a name="line-963"></a> <span class="n">dropbox_type</span><span class="p">,</span> +<a name="line-964"></a> <span class="n">CAJA_TYPE_INFO_PROVIDER</span><span class="p">,</span> +<a name="line-965"></a> <span class="o">&</span><span class="n">info_provider_iface_info</span><span class="p">);</span> +<a name="line-966"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/index.html b/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/index.html new file mode 100644 index 0000000..c2b791a --- /dev/null +++ b/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/index.html @@ -0,0 +1,126 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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 - caja-dropbox: </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="uninitvar" name="uninitvar" checked></td><td>2</td><td>uninitvar</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="variableScope" name="variableScope" checked></td><td>2</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>1</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="missingIncludeSystem" name="missingIncludeSystem" checked></td><td>1</td><td>missingIncludeSystem</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="varFuncNullUB" name="varFuncNullUB" checked></td><td>1</td><td>varFuncNullUB</td></tr> + <tr><td></td><td>7</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="2.html"></a></td></tr> + <tr class="missingIncludeSystem"><td><a href="2.html#line-0">0</a></td><td>missingIncludeSystem</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">src/caja-dropbox-hooks.c</a></td></tr> + <tr class="uninitvar"><td><a href="0.html#line-69">69</a></td><td>uninitvar</td><td><a href="https://cwe.mitre.org/data/definitions/457.html">457</a></td><td>error</td><td class="error">Uninitialized variable: line</td></tr> + <tr class="uninitvar"><td><a href="0.html#line-86">86</a></td><td>uninitvar</td><td><a href="https://cwe.mitre.org/data/definitions/457.html">457</a></td><td>error</td><td class="error">Uninitialized variable: line</td></tr> + <tr><td colspan="5"><a href="1.html">src/caja-dropbox.c</a></td></tr> + <tr class="variableScope"><td><a href="1.html#line-312">312</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 'file' can be reduced.</td></tr> + <tr class="variableScope"><td><a href="1.html#line-752">752</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 'i' can be reduced.</td></tr> + <tr class="knownConditionTrueFalse"><td><a href="1.html#line-756">756</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td >Condition 'emblem_paths_response' is always true</td></tr> + <tr class="varFuncNullUB"><td><a href="1.html#line-847">847</a></td><td>varFuncNullUB</td><td><a href="https://cwe.mitre.org/data/definitions/475.html">475</a></td><td>portability</td><td >Passing NULL after the last typed argument to a variadic function leads to undefined behaviour.</td></tr> + </table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/stats.html b/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/stats.html new file mode 100644 index 0000000..c448fd4 --- /dev/null +++ b/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/stats.html @@ -0,0 +1,111 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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 - caja-dropbox: 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 error severity, total findings: 2<br> +   2 <a href="0.html"> src/caja-dropbox-hooks.c</a><br> +</p> +<p>Top 10 files for portability severity, total findings: 1<br> +   1 <a href="1.html"> src/caja-dropbox.c</a><br> +</p> +<p>Top 10 files for style severity, total findings: 3<br> +   3 <a href="1.html"> src/caja-dropbox.c</a><br> +</p> + + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/style.css b/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/style.css new file mode 100644 index 0000000..07125f4 --- /dev/null +++ b/2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/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; +} diff --git a/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/index.html b/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/index.html new file mode 100644 index 0000000..3379de5 --- /dev/null +++ b/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/index.html @@ -0,0 +1,97 @@ +<html> +<head> +<title>rootdir - scan-build results</title> +<link type="text/css" rel="stylesheet" href="scanview.css"/> +<script src="sorttable.js"></script> +<script language='javascript' type="text/javascript"> +function SetDisplay(RowClass, DisplayVal) +{ + var Rows = document.getElementsByTagName("tr"); + for ( var i = 0 ; i < Rows.length; ++i ) { + if (Rows[i].className == RowClass) { + Rows[i].style.display = DisplayVal; + } + } +} + +function CopyCheckedStateToCheckButtons(SummaryCheckButton) { + var Inputs = document.getElementsByTagName("input"); + for ( var i = 0 ; i < Inputs.length; ++i ) { + if (Inputs[i].type == "checkbox") { + if(Inputs[i] != SummaryCheckButton) { + Inputs[i].checked = SummaryCheckButton.checked; + Inputs[i].onclick(); + } + } + } +} + +function returnObjById( id ) { + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +var NumUnchecked = 0; + +function ToggleDisplay(CheckButton, ClassName) { + if (CheckButton.checked) { + SetDisplay(ClassName, ""); + if (--NumUnchecked == 0) { + returnObjById("AllBugsCheck").checked = true; + } + } + else { + SetDisplay(ClassName, "none"); + NumUnchecked++; + returnObjById("AllBugsCheck").checked = false; + } +} +</script> +<!-- SUMMARYENDHEAD --> +</head> +<body> +<h1>rootdir - scan-build results</h1> + +<table> +<tr><th>User:</th><td>root@69e851c1c553</td></tr> +<tr><th>Working Directory:</th><td>/rootdir</td></tr> +<tr><th>Command Line:</th><td>make -j 2</td></tr> +<tr><th>Clang Version:</th><td>clang version 12.0.0 (Fedora 12.0.0-2.fc34) +</td></tr> +<tr><th>Date:</th><td>Fri Aug 6 19:09:01 2021</td></tr> +</table> +<h2>Bug Summary</h2><table> +<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead> +<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">2</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr> +<tr><th>Logic error</th><th colspan=2></th></tr> +<tr><td class="SUMM_DESC">Cast from non-struct type to struct type</td><td class="Q">2</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_cast_from_non-struct_type_to_struct_type');" checked/></center></td></tr> +</table> +<h2>Reports</h2> + +<table class="sortable" style="table-layout:automatic"> +<thead><tr> + <td>Bug Group</td> + <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind"> ▾</span></td> + <td>File</td> + <td>Function/Method</td> + <td class="Q">Line</td> + <td class="Q">Path Length</td> + <td class="sorttable_nosort"></td> + <!-- REPORTBUGCOL --> +</tr></thead> +<tbody> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-0cf114.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-0cf114.html" --> +</tr> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-63011c.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-63011c.html" --> +</tr> +</tbody> +</table> + +</body></html> diff --git a/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/report-0cf114.html b/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/report-0cf114.html new file mode 100644 index 0000000..9db5635 --- /dev/null +++ b/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/report-0cf114.html @@ -0,0 +1,1225 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/12.0.0 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/12.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir /rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2021-08-06-190901-5809-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "S") { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].checked = !checked; + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> +</form> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + s.classList.remove("selected"); + }); + el.classList.add("selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); +} + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "j") { + navigateTo(/*up=*/false); + } else if (event.key == "k") { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/report-63011c.html b/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/report-63011c.html new file mode 100644 index 0000000..a3c208b --- /dev/null +++ b/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/report-63011c.html @@ -0,0 +1,1225 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/12.0.0 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -D PIC -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/12.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir /rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -o /rootdir/html-report/2021-08-06-190901-5809-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "S") { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].checked = !checked; + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> +</form> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + s.classList.remove("selected"); + }); + el.classList.add("selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); +} + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "j") { + navigateTo(/*up=*/false); + } else if (event.key == "k") { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/scanview.css b/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/scanview.css new file mode 100644 index 0000000..cf8a5a6 --- /dev/null +++ b/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/scanview.css @@ -0,0 +1,62 @@ +body { color:#000000; background-color:#ffffff } +body { font-family: Helvetica, sans-serif; font-size:9pt } +h1 { font-size: 14pt; } +h2 { font-size: 12pt; } +table { font-size:9pt } +table { border-spacing: 0px; border: 1px solid black } +th, table thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + font-weight: bold; font-family: Verdana; + white-space:nowrap; +} +.W { font-size:0px } +th, td { padding:5px; padding-left:8px; text-align:left } +td.SUMM_DESC { padding-left:12px } +td.DESC { white-space:pre } +td.Q { text-align:right } +td { text-align:left } +tbody.scrollContent { overflow:auto } + +table.form_group { + background-color: #ccc; + border: 1px solid #333; + padding: 2px; +} + +table.form_inner_group { + background-color: #ccc; + border: 1px solid #333; + padding: 0px; +} + +table.form { + background-color: #999; + border: 1px solid #333; + padding: 2px; +} + +td.form_label { + text-align: right; + vertical-align: top; +} +/* For one line entires */ +td.form_clabel { + text-align: right; + vertical-align: center; +} +td.form_value { + text-align: left; + vertical-align: top; +} +td.form_submit { + text-align: right; + vertical-align: top; +} + +h1.SubmitFail { + color: #f00; +} +h1.SubmitOk { +} diff --git a/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/sorttable.js b/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/sorttable.js new file mode 100644 index 0000000..32faa07 --- /dev/null +++ b/2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/sorttable.js @@ -0,0 +1,492 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backward compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + //row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[�$�]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; diff --git a/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/0.html b/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/0.html new file mode 100644 index 0000000..5f5026b --- /dev/null +++ b/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/0.html @@ -0,0 +1,2169 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos pre { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } +span.linenos { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } +td.linenos pre.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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 - caja-dropbox: src/caja-dropbox.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> caja-dropbox.c</p> +<a href="0.html#line-312"> variableScope 312</a><a href="0.html#line-748"> knownConditionTrueFalse 748</a><a href="0.html#line-752"> variableScope 752</a><a href="0.html#line-756"> knownConditionTrueFalse 756</a><a href="0.html#line-847"> varFuncNullUB 847</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</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/*</span> +<a name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * caja-dropbox.c</span> +<a name="line-5"></a><span class="cm"> * Implements the Caja extension API for Dropbox.</span> +<a name="line-6"></a><span class="cm"> *</span> +<a name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a name="line-8"></a><span class="cm"> *</span> +<a name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a name="line-13"></a><span class="cm"> *</span> +<a name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a name="line-18"></a><span class="cm"> *</span> +<a name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a name="line-21"></a><span class="cm"> *</span> +<a name="line-22"></a><span class="cm"> */</span> +<a name="line-23"></a> +<a name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a name="line-25"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="cp"></span> +<a name="line-26"></a><span class="cp">#endif</span> +<a name="line-27"></a> +<a name="line-28"></a><span class="cp">#include</span> <span class="cpf"><sys/types.h></span><span class="cp"></span> +<a name="line-29"></a><span class="cp">#include</span> <span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a name="line-30"></a><span class="cp">#include</span> <span class="cpf"><sys/un.h></span><span class="cp"></span> +<a name="line-31"></a><span class="cp">#include</span> <span class="cpf"><errno.h></span><span class="cp"></span> +<a name="line-32"></a><span class="cp">#include</span> <span class="cpf"><unistd.h></span><span class="cp"></span> +<a name="line-33"></a><span class="cp">#include</span> <span class="cpf"><ctype.h></span><span class="cp"></span> +<a name="line-34"></a> +<a name="line-35"></a><span class="cp">#include</span> <span class="cpf"><glib.h></span><span class="cp"></span> +<a name="line-36"></a><span class="cp">#include</span> <span class="cpf"><glib/gprintf.h></span><span class="cp"></span> +<a name="line-37"></a><span class="cp">#include</span> <span class="cpf"><glib-object.h></span><span class="cp"></span> +<a name="line-38"></a><span class="cp">#include</span> <span class="cpf"><gtk/gtk.h></span><span class="cp"></span> +<a name="line-39"></a> +<a name="line-40"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-extension-types.h></span><span class="cp"></span> +<a name="line-41"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-menu-provider.h></span><span class="cp"></span> +<a name="line-42"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="cp"></span> +<a name="line-43"></a> +<a name="line-44"></a><span class="cp">#include</span> <span class="cpf">"g-util.h"</span><span class="cp"></span> +<a name="line-45"></a><span class="cp">#include</span> <span class="cpf">"dropbox-command-client.h"</span><span class="cp"></span> +<a name="line-46"></a><span class="cp">#include</span> <span class="cpf">"caja-dropbox.h"</span><span class="cp"></span> +<a name="line-47"></a><span class="cp">#include</span> <span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a name="line-48"></a> +<a name="line-49"></a><span class="k">static</span> <span class="kt">char</span> <span class="o">*</span><span class="n">emblems</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span><span class="s">"dropbox-uptodate"</span><span class="p">,</span> <span class="s">"dropbox-syncing"</span><span class="p">,</span> <span class="s">"dropbox-unsyncable"</span><span class="p">};</span> +<a name="line-50"></a><span class="n">gchar</span> <span class="o">*</span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="n">EMBLEMDIR</span> <span class="p">,</span> <span class="nb">NULL</span> <span class="p">};</span> +<a name="line-51"></a> +<a name="line-52"></a><span class="n">gboolean</span> <span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span> +<a name="line-53"></a> +<a name="line-54"></a><span class="k">static</span> <span class="n">GType</span> <span class="n">dropbox_type</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-55"></a> +<a name="line-56"></a><span class="cm">/*</span> +<a name="line-57"></a><span class="cm"> Simplifies a path by removing navigation elements such as '.' and '..'</span> +<a name="line-58"></a> +<a name="line-59"></a><span class="cm"> Arguments:</span> +<a name="line-60"></a><span class="cm"> - path: input path to be canonicalized</span> +<a name="line-61"></a> +<a name="line-62"></a><span class="cm"> Returns:</span> +<a name="line-63"></a><span class="cm"> Canonicalized path if input path is valid.</span> +<a name="line-64"></a><span class="cm"> NULL otherwise.</span> +<a name="line-65"></a><span class="cm">*/</span> +<a name="line-66"></a><span class="k">static</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-67"></a><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">path</span><span class="p">)</span> <span class="p">{</span> +<a name="line-68"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-69"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-70"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">cpy</span><span class="p">,</span> <span class="o">**</span><span class="n">elts</span><span class="p">;</span> +<a name="line-71"></a> +<a name="line-72"></a> <span class="n">g_assert</span><span class="p">(</span><span class="n">path</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-73"></a> <span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'/'</span><span class="p">);</span> +<a name="line-74"></a> +<a name="line-75"></a> <span class="n">elts</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s">"/"</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-76"></a> <span class="n">cpy</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="n">g_strv_length</span><span class="p">(</span><span class="n">elts</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span> +<a name="line-77"></a> <span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="s">"/"</span><span class="p">;</span> +<a name="line-78"></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">elts</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-79"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">".."</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-80"></a> <span class="k">if</span> <span class="p">(</span><span class="n">j</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-81"></a> <span class="n">j</span><span class="o">--</span><span class="p">;</span> +<a name="line-82"></a> <span class="p">}</span> +<a name="line-83"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-84"></a> <span class="c1">// Input path has too many parent directory references and is invalid</span> +<a name="line-85"></a> <span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-86"></a> <span class="k">goto</span> <span class="n">exit</span><span class="p">;</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">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">"."</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-90"></a> <span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a name="line-91"></a> <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">cpy</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-95"></a> <span class="n">toret</span> <span class="o">=</span> <span class="n">g_build_filenamev</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span> +<a name="line-96"></a> +<a name="line-97"></a><span class="nl">exit</span><span class="p">:</span> +<a name="line-98"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span> +<a name="line-99"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">elts</span><span class="p">);</span> +<a name="line-100"></a> +<a name="line-101"></a> <span class="k">return</span> <span class="n">toret</span><span class="p">;</span> +<a name="line-102"></a><span class="p">}</span> +<a name="line-103"></a> +<a name="line-104"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-105"></a><span class="n">reset_file</span><span class="p">(</span><span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">)</span> <span class="p">{</span> +<a name="line-106"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"resetting file %p"</span><span class="p">,</span> <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)</span> <span class="n">file</span><span class="p">);</span> +<a name="line-107"></a> <span class="n">caja_file_info_invalidate_extension_info</span><span class="p">(</span><span class="n">file</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">static</span> <span class="n">gboolean</span> +<a name="line-111"></a><span class="n">reset_all_files</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-112"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a name="line-113"></a> +<a name="line-114"></a> <span class="cm">/* this works because you can call a function pointer with</span> +<a name="line-115"></a><span class="cm"> more arguments than it takes */</span> +<a name="line-116"></a> <span class="n">g_hash_table_foreach</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="p">(</span><span class="n">GHFunc</span><span class="p">)</span> <span class="n">reset_file</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-117"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-118"></a><span class="p">}</span> +<a name="line-119"></a> +<a name="line-120"></a> +<a name="line-121"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-122"></a><span class="n">when_file_dies</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">,</span> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">address</span><span class="p">)</span> <span class="p">{</span> +<a name="line-123"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a name="line-124"></a> +<a name="line-125"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> +<a name="line-126"></a> +<a name="line-127"></a> <span class="cm">/* we never got a change to view this file */</span> +<a name="line-128"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-129"></a> <span class="k">return</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="cm">/* too chatty */</span> +<a name="line-133"></a> <span class="cm">/* debug("removing %s <-> 0x%p", filename, address); */</span> +<a name="line-134"></a> +<a name="line-135"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-136"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> +<a name="line-137"></a><span class="p">}</span> +<a name="line-138"></a> +<a name="line-139"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-140"></a><span class="n">changed_cb</span><span class="p">(</span><span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-141"></a> <span class="cm">/* check if this file's path has changed, if so update the hash and invalidate</span> +<a name="line-142"></a><span class="cm"> the file */</span> +<a name="line-143"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">,</span> <span class="o">*</span><span class="n">pfilename</span><span class="p">;</span> +<a name="line-144"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename2</span><span class="p">;</span> +<a name="line-145"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a name="line-146"></a> +<a name="line-147"></a> <span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-148"></a> <span class="n">pfilename</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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-149"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">pfilename</span> <span class="o">?</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">)</span> <span class="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-150"></a> +<a name="line-151"></a> <span class="cm">/* Canonicalization will only null-out a non-null filename if it is invalid */</span> +<a name="line-152"></a> <span class="n">g_assert</span><span class="p">((</span><span class="n">pfilename</span> <span class="o">==</span> <span class="nb">NULL</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="o">||</span> <span class="p">(</span><span class="n">pfilename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">filename</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">));</span> +<a name="line-153"></a> +<a name="line-154"></a> <span class="n">filename2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-155"></a> +<a name="line-156"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a name="line-157"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-158"></a> +<a name="line-159"></a> <span class="cm">/* if filename2 is NULL we've never seen this file in update_file_info */</span> +<a name="line-160"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename2</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-161"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-162"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-163"></a> <span class="p">}</span> +<a name="line-164"></a> +<a name="line-165"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-166"></a> <span class="cm">/* A file has moved to offline storage. Lets remove it from our tables. */</span> +<a name="line-167"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-168"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename2</span><span class="p">);</span> +<a name="line-169"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-170"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-171"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-172"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-173"></a> <span class="p">}</span> +<a name="line-174"></a> +<a name="line-175"></a> <span class="cm">/* this is a hack, because caja doesn't do this for us, for some reason</span> +<a name="line-176"></a><span class="cm"> the file's path has changed */</span> +<a name="line-177"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">filename2</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-178"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"shifty old: %s, new %s"</span><span class="p">,</span> <span class="n">filename2</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-179"></a> +<a name="line-180"></a> <span class="cm">/* gotta do this first, the call after this frees filename2 */</span> +<a name="line-181"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename2</span><span class="p">);</span> +<a name="line-182"></a> +<a name="line-183"></a> <span class="n">g_hash_table_replace</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span> +<a name="line-184"></a> +<a name="line-185"></a> <span class="p">{</span> +<a name="line-186"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">f2</span><span class="p">;</span> +<a name="line-187"></a> <span class="cm">/* we shouldn't have another mapping from filename to an object */</span> +<a name="line-188"></a> <span class="n">f2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-189"></a> <span class="k">if</span> <span class="p">(</span><span class="n">f2</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-190"></a> <span class="cm">/* lets fix it if it's true, just remove the mapping */</span> +<a name="line-191"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-192"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">f2</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="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="n">file</span><span class="p">);</span> +<a name="line-197"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</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="n">g_free</span><span class="p">(</span><span class="n">filename</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="k">static</span> <span class="n">CajaOperationResult</span> +<a name="line-204"></a><span class="n">caja_dropbox_update_file_info</span><span class="p">(</span><span class="n">CajaInfoProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-205"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> +<a name="line-206"></a> <span class="n">GClosure</span> <span class="o">*</span><span class="n">update_complete</span><span class="p">,</span> +<a name="line-207"></a> <span class="n">CajaOperationHandle</span> <span class="o">**</span><span class="n">handle</span><span class="p">)</span> <span class="p">{</span> +<a name="line-208"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">;</span> +<a name="line-209"></a> +<a name="line-210"></a> <span class="n">cvs</span> <span class="o">=</span> <span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span> +<a name="line-211"></a> +<a name="line-212"></a> <span class="cm">/* this code adds this file object to our two-way hash of file objects</span> +<a name="line-213"></a><span class="cm"> so we can shell touch these files later */</span> +<a name="line-214"></a> <span class="p">{</span> +<a name="line-215"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">pfilename</span><span class="p">,</span> <span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a name="line-216"></a> +<a name="line-217"></a> <span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-218"></a> <span class="n">pfilename</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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-219"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-220"></a> <span class="k">if</span> <span class="p">(</span><span class="n">pfilename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-221"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a name="line-222"></a> <span class="p">}</span> +<a name="line-223"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-224"></a> <span class="kt">int</span> <span class="n">cmp</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-225"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">stored_filename</span><span class="p">;</span> +<a name="line-226"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a name="line-227"></a> +<a name="line-228"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a name="line-229"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a name="line-230"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-231"></a> <span class="cm">/* pfilename path was invalid if canonicalize operation nulled it out */</span> +<a name="line-232"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span> +<a name="line-233"></a> <span class="p">}</span> +<a name="line-234"></a> <span class="n">stored_filename</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-235"></a> +<a name="line-236"></a> <span class="cm">/* don't worry about the dup checks, gcc is smart enough to optimize this</span> +<a name="line-237"></a><span class="cm"> GCSE ftw */</span> +<a name="line-238"></a> <span class="k">if</span> <span class="p">((</span><span class="n">stored_filename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="p">(</span><span class="n">cmp</span> <span class="o">=</span> <span class="n">strcmp</span><span class="p">(</span><span class="n">stored_filename</span><span class="p">,</span> <span class="n">filename</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">||</span> +<a name="line-239"></a> <span class="n">stored_filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <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">stored_filename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">cmp</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-242"></a> <span class="cm">/* this happens when the filename changes name on a file obj</span> +<a name="line-243"></a><span class="cm"> but changed_cb isn't called */</span> +<a name="line-244"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-245"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a name="line-246"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">stored_filename</span><span class="p">);</span> +<a name="line-247"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-248"></a> <span class="p">}</span> +<a name="line-249"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">stored_filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-250"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">f2</span><span class="p">;</span> +<a name="line-251"></a> +<a name="line-252"></a> <span class="k">if</span> <span class="p">((</span><span class="n">f2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-253"></a> <span class="cm">/* if the filename exists in the filename2obj hash</span> +<a name="line-254"></a><span class="cm"> but the file obj doesn't exist in the obj2filename hash:</span> +<a name="line-255"></a> +<a name="line-256"></a><span class="cm"> this happens when caja allocates another file object</span> +<a name="line-257"></a><span class="cm"> for a filename without first deleting the original file object</span> +<a name="line-258"></a> +<a name="line-259"></a><span class="cm"> just remove the association to the older file object, it's obsolete</span> +<a name="line-260"></a><span class="cm"> */</span> +<a name="line-261"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">f2</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-262"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">f2</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-263"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-264"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">f2</span><span class="p">);</span> +<a name="line-265"></a> <span class="p">}</span> +<a name="line-266"></a> <span class="p">}</span> +<a name="line-267"></a> +<a name="line-268"></a> <span class="cm">/* too chatty */</span> +<a name="line-269"></a> <span class="cm">/* debug("adding %s <-> 0x%p", filename, file);*/</span> +<a name="line-270"></a> <span class="n">g_object_weak_ref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-271"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="n">file</span><span class="p">);</span> +<a name="line-272"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span> +<a name="line-273"></a> <span class="n">g_signal_connect</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="s">"changed"</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-274"></a> <span class="p">}</span> +<a name="line-275"></a> +<a name="line-276"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-277"></a> <span class="p">}</span> +<a name="line-278"></a> <span class="p">}</span> +<a name="line-279"></a> +<a name="line-280"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">))</span> <span class="o">==</span> <span class="n">FALSE</span> <span class="o">||</span> +<a name="line-281"></a> <span class="n">caja_file_info_is_gone</span><span class="p">(</span><span class="n">file</span><span class="p">))</span> <span class="p">{</span> +<a name="line-282"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_COMPLETE</span><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="p">{</span> +<a name="line-286"></a> <span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="n">dfic</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-287"></a> +<a name="line-288"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-289"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">provider</span> <span class="o">=</span> <span class="n">provider</span><span class="p">;</span> +<a name="line-290"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GET_FILE_INFO</span><span class="p">;</span> +<a name="line-291"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span> <span class="o">=</span> <span class="n">g_closure_ref</span><span class="p">(</span><span class="n">update_complete</span><span class="p">);</span> +<a name="line-292"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">file</span> <span class="o">=</span> <span class="n">g_object_ref</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-293"></a> +<a name="line-294"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dfic</span><span class="p">);</span> +<a name="line-295"></a> +<a name="line-296"></a> <span class="o">*</span><span class="n">handle</span> <span class="o">=</span> <span class="p">(</span><span class="n">CajaOperationHandle</span> <span class="o">*</span><span class="p">)</span> <span class="n">dfic</span><span class="p">;</span> +<a name="line-297"></a> +<a name="line-298"></a> <span class="k">return</span> <span class="n">dropbox_use_operation_in_progress_workaround</span> +<a name="line-299"></a> <span class="o">?</span> <span class="nl">CAJA_OPERATION_COMPLETE</span> +<a name="line-300"></a> <span class="p">:</span> <span class="n">CAJA_OPERATION_IN_PROGRESS</span><span class="p">;</span> +<a name="line-301"></a> <span class="p">}</span> +<a name="line-302"></a><span class="p">}</span> +<a name="line-303"></a> +<a name="line-304"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-305"></a><span class="n">handle_shell_touch</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-306"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">path</span><span class="p">;</span> +<a name="line-307"></a> +<a name="line-308"></a> <span class="c1">// debug_enter();</span> +<a name="line-309"></a> +<a name="line-310"></a> <span class="k">if</span> <span class="p">((</span><span class="n">path</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="s">"path"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a name="line-311"></a> <span class="n">path</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="o">==</span> <span class="sc">'/'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-312"></a><span class="hll"> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'file' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-313"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a name="line-314"></a> +<a name="line-315"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> +<a name="line-316"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-317"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"shell touch for %s"</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-318"></a> +<a name="line-319"></a> <span class="n">file</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-320"></a> +<a name="line-321"></a> <span class="k">if</span> <span class="p">(</span><span class="n">file</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-322"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"gonna reset %s"</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a name="line-323"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a name="line-324"></a> <span class="p">}</span> +<a name="line-325"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-326"></a> <span class="p">}</span> +<a name="line-327"></a> <span class="p">}</span> +<a name="line-328"></a> +<a name="line-329"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-330"></a><span class="p">}</span> +<a name="line-331"></a> +<a name="line-332"></a><span class="n">gboolean</span> +<a name="line-333"></a><span class="n">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span> <span class="o">*</span><span class="n">dficr</span><span class="p">)</span> <span class="p">{</span> +<a name="line-334"></a> +<a name="line-335"></a> <span class="c1">//debug_enter();</span> +<a name="line-336"></a> <span class="n">CajaOperationResult</span> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span> +<a name="line-337"></a> +<a name="line-338"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="p">)</span> <span class="p">{</span> +<a name="line-339"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">status</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-340"></a> <span class="n">gboolean</span> <span class="n">isdir</span><span class="p">;</span> +<a name="line-341"></a> +<a name="line-342"></a> <span class="n">isdir</span> <span class="o">=</span> <span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">)</span> <span class="p">;</span> +<a name="line-343"></a> +<a name="line-344"></a> <span class="cm">/* if we have emblems just use them. */</span> +<a name="line-345"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a name="line-346"></a> <span class="p">(</span><span class="n">status</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">,</span> <span class="s">"emblems"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-347"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a name="line-348"></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">status</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-349"></a> <span class="k">if</span> <span class="p">(</span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> +<a name="line-350"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-351"></a> <span class="p">}</span> +<a name="line-352"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a name="line-353"></a> <span class="p">}</span> +<a name="line-354"></a> <span class="cm">/* if the file status command went okay */</span> +<a name="line-355"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a name="line-356"></a> <span class="p">(</span><span class="n">status</span> <span class="o">=</span> +<a name="line-357"></a> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">,</span> <span class="s">"status"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&&</span> +<a name="line-358"></a> <span class="p">((</span><span class="n">isdir</span> <span class="o">==</span> <span class="n">TRUE</span> <span class="o">&&</span> +<a name="line-359"></a> <span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">||</span> <span class="n">isdir</span> <span class="o">==</span> <span class="n">FALSE</span><span class="p">))</span> <span class="p">{</span> +<a name="line-360"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">tag</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-361"></a> +<a name="line-362"></a> <span class="cm">/* set the tag emblem */</span> +<a name="line-363"></a> <span class="k">if</span> <span class="p">(</span><span class="n">isdir</span> <span class="o">&&</span> +<a name="line-364"></a> <span class="p">(</span><span class="n">tag</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">,</span> <span class="s">"tag"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-365"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-366"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"web"</span><span class="p">);</span> +<a name="line-367"></a> <span class="p">}</span> +<a name="line-368"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"shared"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-369"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"people"</span><span class="p">);</span> +<a name="line-370"></a> <span class="p">}</span> +<a name="line-371"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"photos"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-372"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"photos"</span><span class="p">);</span> +<a name="line-373"></a> <span class="p">}</span> +<a name="line-374"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"sandbox"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</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-375"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"star"</span><span class="p">);</span> +<a name="line-376"></a> <span class="p">}</span> +<a name="line-377"></a> <span class="p">}</span> +<a name="line-378"></a> +<a name="line-379"></a> <span class="cm">/* set the status emblem */</span> +<a name="line-380"></a> <span class="p">{</span> +<a name="line-381"></a> <span class="kt">int</span> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-382"></a> +<a name="line-383"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"up to date"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</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-384"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-385"></a> <span class="p">}</span> +<a name="line-386"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"syncing"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</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-387"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span> +<a name="line-388"></a> <span class="p">}</span> +<a name="line-389"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"unsyncable"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</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-390"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span> +<a name="line-391"></a> <span class="p">}</span> +<a name="line-392"></a> +<a name="line-393"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_code</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-394"></a> <span class="cm">/*</span> +<a name="line-395"></a><span class="cm"> debug("%s to %s", emblems[emblem_code-1],</span> +<a name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr->dfic->file),</span> +<a name="line-397"></a><span class="cm"> NULL, NULL));</span> +<a name="line-398"></a><span class="cm"> */</span> +<a name="line-399"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="n">emblems</span><span class="p">[</span><span class="n">emblem_code</span><span class="mi">-1</span><span class="p">]);</span> +<a name="line-400"></a> <span class="p">}</span> +<a name="line-401"></a> <span class="p">}</span> +<a name="line-402"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a name="line-403"></a> <span class="p">}</span> +<a name="line-404"></a> <span class="p">}</span> +<a name="line-405"></a> +<a name="line-406"></a> <span class="cm">/* complete the info request */</span> +<a name="line-407"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">)</span> <span class="p">{</span> +<a name="line-408"></a> <span class="n">caja_info_provider_update_complete_invoke</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">,</span> +<a name="line-409"></a> <span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="p">,</span> +<a name="line-410"></a> <span class="p">(</span><span class="n">CajaOperationHandle</span><span class="o">*</span><span class="p">)</span> <span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">,</span> +<a name="line-411"></a> <span class="n">result</span><span class="p">);</span> +<a name="line-412"></a> <span class="p">}</span> +<a name="line-413"></a> +<a name="line-414"></a> <span class="cm">/* destroy the objects we created */</span> +<a name="line-415"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-416"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">);</span> +<a name="line-417"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-418"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">);</span> +<a name="line-419"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-420"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">);</span> +<a name="line-421"></a> +<a name="line-422"></a> <span class="cm">/* unref the objects we didn't create */</span> +<a name="line-423"></a> <span class="n">g_closure_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">);</span> +<a name="line-424"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span> +<a name="line-425"></a> +<a name="line-426"></a> <span class="cm">/* now free the structs */</span> +<a name="line-427"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">);</span> +<a name="line-428"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="p">);</span> +<a name="line-429"></a> +<a name="line-430"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-431"></a><span class="p">}</span> +<a name="line-432"></a> +<a name="line-433"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-434"></a><span class="n">caja_dropbox_cancel_update</span><span class="p">(</span><span class="n">CajaInfoProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-435"></a> <span class="n">CajaOperationHandle</span> <span class="o">*</span><span class="n">handle</span><span class="p">)</span> <span class="p">{</span> +<a name="line-436"></a> <span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="n">dfic</span> <span class="o">=</span> <span class="p">(</span><span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">handle</span><span class="p">;</span> +<a name="line-437"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-438"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-439"></a><span class="p">}</span> +<a name="line-440"></a> +<a name="line-441"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-442"></a><span class="n">menu_item_cb</span><span class="p">(</span><span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">,</span> +<a name="line-443"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-444"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">verb</span><span class="p">;</span> +<a name="line-445"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">;</span> +<a name="line-446"></a> <span class="n">DropboxGeneralCommand</span> <span class="o">*</span><span class="n">dcac</span><span class="p">;</span> +<a name="line-447"></a> +<a name="line-448"></a> <span class="n">dcac</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-449"></a> +<a name="line-450"></a> <span class="cm">/* maybe these would be better passed in a container</span> +<a name="line-451"></a><span class="cm"> struct used as the userdata pointer, oh well this</span> +<a name="line-452"></a><span class="cm"> is how dave camp does it */</span> +<a name="line-453"></a> <span class="n">files</span> <span class="o">=</span> <span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_files"</span><span class="p">);</span> +<a name="line-454"></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_verb"</span><span class="p">);</span> +<a name="line-455"></a> +<a name="line-456"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a name="line-457"></a> +<a name="line-458"></a> <span class="cm">/* build the argument list */</span> +<a name="line-459"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-460"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-461"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-462"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_strfreev</span><span class="p">);</span> +<a name="line-463"></a> <span class="p">{</span> +<a name="line-464"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">arglist</span><span class="p">;</span> +<a name="line-465"></a> <span class="n">guint</span> <span class="n">i</span><span class="p">;</span> +<a name="line-466"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">li</span><span class="p">;</span> +<a name="line-467"></a> +<a name="line-468"></a> <span class="n">arglist</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-469"></a> +<a name="line-470"></a> <span class="k">for</span> <span class="p">(</span><span class="n">li</span> <span class="o">=</span> <span class="n">files</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">li</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">li</span> <span class="o">=</span> <span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span> <span class="p">{</span> +<a name="line-471"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">CAJA_FILE_INFO</span><span class="p">(</span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">));</span> +<a name="line-472"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">path</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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-473"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-474"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">path</span><span class="p">)</span> +<a name="line-475"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-476"></a> <span class="n">arglist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">path</span><span class="p">;</span> +<a name="line-477"></a> <span class="n">i</span><span class="o">++</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="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> +<a name="line-481"></a> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span> +<a name="line-482"></a> <span class="n">arglist</span><span class="p">);</span> +<a name="line-483"></a> <span class="p">}</span> +<a name="line-484"></a> +<a name="line-485"></a> <span class="p">{</span> +<a name="line-486"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">arglist</span><span class="p">;</span> +<a name="line-487"></a> <span class="n">arglist</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> +<a name="line-488"></a> <span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">);</span> +<a name="line-489"></a> <span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-490"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"verb"</span><span class="p">),</span> <span class="n">arglist</span><span class="p">);</span> +<a name="line-491"></a> <span class="p">}</span> +<a name="line-492"></a> +<a name="line-493"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_action"</span><span class="p">);</span> +<a name="line-494"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">handler</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-495"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">handler_ud</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-496"></a> +<a name="line-497"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dcac</span><span class="p">);</span> +<a name="line-498"></a><span class="p">}</span> +<a name="line-499"></a> +<a name="line-500"></a><span class="k">static</span> <span class="kt">char</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">gchar</span> <span class="n">ch</span><span class="p">)</span> <span class="p">{</span> +<a name="line-501"></a> <span class="k">return</span> <span class="nf">isdigit</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="o">?</span> <span class="n">ch</span> <span class="o">-</span> <span class="sc">'0'</span> <span class="o">:</span> <span class="n">tolower</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="o">-</span> <span class="sc">'a'</span> <span class="o">+</span> <span class="mi">10</span><span class="p">;</span> +<a name="line-502"></a><span class="p">}</span> +<a name="line-503"></a> +<a name="line-504"></a><span class="c1">// decode in --> out, but dont fill more than n chars into out</span> +<a name="line-505"></a><span class="c1">// returns len of out if thing went well, -1 if n wasn't big enough</span> +<a name="line-506"></a><span class="c1">// can be used in place (whoa!)</span> +<a name="line-507"></a><span class="kt">int</span> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">gchar</span><span class="o">*</span> <span class="n">out</span><span class="p">,</span> <span class="n">gchar</span><span class="o">*</span> <span class="n">in</span><span class="p">,</span> <span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> +<a name="line-508"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">out_initial</span><span class="p">;</span> +<a name="line-509"></a> +<a name="line-510"></a> <span class="k">for</span><span class="p">(</span><span class="n">out_initial</span> <span class="o">=</span> <span class="n">out</span><span class="p">;</span> <span class="n">out</span><span class="o">-</span><span class="n">out_initial</span> <span class="o"><</span> <span class="n">n</span> <span class="o">&&</span> <span class="o">*</span><span class="n">in</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">;</span> <span class="n">out</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-511"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">in</span> <span class="o">==</span> <span class="sc">'%'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-512"></a> <span class="k">if</span> <span class="p">((</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">))</span> <span class="p">{</span> +<a name="line-513"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o"><<</span> <span class="mi">4</span> <span class="o">|</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span> +<a name="line-514"></a> <span class="n">in</span> <span class="o">+=</span> <span class="mi">3</span><span class="p">;</span> +<a name="line-515"></a> <span class="p">}</span> +<a name="line-516"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-517"></a> <span class="c1">// Input string isn't well-formed</span> +<a name="line-518"></a> <span class="k">return</span> <span class="mi">-1</span><span class="p">;</span> +<a name="line-519"></a> <span class="p">}</span> +<a name="line-520"></a> <span class="p">}</span> +<a name="line-521"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-522"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="o">*</span><span class="n">in</span><span class="p">;</span> +<a name="line-523"></a> <span class="n">in</span><span class="o">++</span><span class="p">;</span> +<a name="line-524"></a> <span class="p">}</span> +<a name="line-525"></a> <span class="p">}</span> +<a name="line-526"></a> +<a name="line-527"></a> <span class="k">if</span> <span class="p">(</span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span> <span class="o"><</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> +<a name="line-528"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> +<a name="line-529"></a> <span class="k">return</span> <span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="p">;</span> +<a name="line-530"></a> <span class="p">}</span> +<a name="line-531"></a> <span class="k">return</span> <span class="mi">-1</span><span class="p">;</span> +<a name="line-532"></a><span class="p">}</span> +<a name="line-533"></a> +<a name="line-534"></a><span class="k">static</span> <span class="kt">int</span> +<a name="line-535"></a><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">gchar</span> <span class="o">**</span><span class="n">options</span><span class="p">,</span> +<a name="line-536"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">menu</span><span class="p">,</span> +<a name="line-537"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">old_action_string</span><span class="p">,</span> +<a name="line-538"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">toret</span><span class="p">,</span> +<a name="line-539"></a> <span class="n">CajaMenuProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-540"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">)</span> +<a name="line-541"></a><span class="p">{</span> +<a name="line-542"></a> <span class="kt">int</span> <span class="n">ret</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-543"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a name="line-544"></a> +<a name="line-545"></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">options</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-546"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">option_info</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">"~"</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span> +<a name="line-547"></a> <span class="cm">/* if this is a valid string */</span> +<a name="line-548"></a> <span class="k">if</span> <span class="p">(</span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> +<a name="line-549"></a> <span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-550"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span> +<a name="line-551"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-552"></a> <span class="p">}</span> +<a name="line-553"></a> +<a name="line-554"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">item_name</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> +<a name="line-555"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">item_inner</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> +<a name="line-556"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">verb</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> +<a name="line-557"></a> +<a name="line-558"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_name</span><span class="p">,</span> <span class="n">item_name</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">item_name</span><span class="p">));</span> +<a name="line-559"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">verb</span><span class="p">));</span> +<a name="line-560"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="n">item_inner</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">item_inner</span><span class="p">));</span> +<a name="line-561"></a> +<a name="line-562"></a> <span class="c1">// If the inner section has a menu in it then we create a submenu. The verb will be ignored.</span> +<a name="line-563"></a> <span class="c1">// Otherwise add the verb to our map and add the menu item to the list.</span> +<a name="line-564"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="sc">'~'</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-565"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">new_action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span> +<a name="line-566"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">suboptions</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="s">"|"</span><span class="p">,</span> <span class="mi">-1</span><span class="p">);</span> +<a name="line-567"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">;</span> +<a name="line-568"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">submenu</span> <span class="o">=</span> <span class="n">caja_menu_new</span><span class="p">();</span> +<a name="line-569"></a> +<a name="line-570"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">item_name</span><span class="p">);</span> +<a name="line-571"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="s">"::"</span><span class="p">);</span> +<a name="line-572"></a> +<a name="line-573"></a> <span class="n">ret</span> <span class="o">+=</span> <span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">suboptions</span><span class="p">,</span> <span class="n">submenu</span><span class="p">,</span> <span class="n">new_action_string</span><span class="p">,</span> +<a name="line-574"></a> <span class="n">toret</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">files</span><span class="p">);</span> +<a name="line-575"></a> +<a name="line-576"></a> <span class="n">item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span> +<a name="line-577"></a> <span class="n">item_name</span><span class="p">,</span> <span class="s">""</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-578"></a> <span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">submenu</span><span class="p">);</span> +<a name="line-579"></a> <span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span> <span class="n">item</span><span class="p">);</span> +<a name="line-580"></a> +<a name="line-581"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">suboptions</span><span class="p">);</span> +<a name="line-582"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> +<a name="line-583"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">submenu</span><span class="p">);</span> +<a name="line-584"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-585"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-586"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">;</span> +<a name="line-587"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">new_action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span> +<a name="line-588"></a> <span class="n">gboolean</span> <span class="n">grayed_out</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-589"></a> +<a name="line-590"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">verb</span><span class="p">);</span> +<a name="line-591"></a> +<a name="line-592"></a> <span class="k">if</span> <span class="p">(</span><span class="n">item_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'!'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-593"></a> <span class="n">item_name</span><span class="o">++</span><span class="p">;</span> +<a name="line-594"></a> <span class="n">grayed_out</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-595"></a> <span class="p">}</span> +<a name="line-596"></a> +<a name="line-597"></a> <span class="n">item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span> <span class="n">item_name</span><span class="p">,</span> <span class="n">item_inner</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-598"></a> +<a name="line-599"></a> <span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span> <span class="n">item</span><span class="p">);</span> +<a name="line-600"></a> <span class="cm">/* add the file metadata to this item */</span> +<a name="line-601"></a> <span class="n">g_object_set_data_full</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_files"</span><span class="p">,</span> +<a name="line-602"></a> <span class="n">caja_file_info_list_copy</span> <span class="p">(</span><span class="n">files</span><span class="p">),</span> +<a name="line-603"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">caja_file_info_list_free</span><span class="p">);</span> +<a name="line-604"></a> <span class="cm">/* add the verb metadata */</span> +<a name="line-605"></a> <span class="n">g_object_set_data_full</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_verb"</span><span class="p">,</span> +<a name="line-606"></a> <span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">),</span> +<a name="line-607"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">);</span> +<a name="line-608"></a> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s">"activate"</span><span class="p">,</span> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">menu_item_cb</span><span class="p">),</span> <span class="n">provider</span><span class="p">);</span> +<a name="line-609"></a> +<a name="line-610"></a> <span class="k">if</span> <span class="p">(</span><span class="n">grayed_out</span><span class="p">)</span> <span class="p">{</span> +<a name="line-611"></a> <span class="n">GValue</span> <span class="n">sensitive</span> <span class="o">=</span> <span class="p">{</span> <span class="mi">0</span> <span class="p">};</span> +<a name="line-612"></a> <span class="n">g_value_init</span> <span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span> <span class="n">G_TYPE_BOOLEAN</span><span class="p">);</span> +<a name="line-613"></a> <span class="n">g_value_set_boolean</span> <span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-614"></a> <span class="n">g_object_set_property</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"sensitive"</span><span class="p">,</span> <span class="o">&</span><span class="n">sensitive</span><span class="p">);</span> +<a name="line-615"></a> <span class="p">}</span> +<a name="line-616"></a> +<a name="line-617"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> +<a name="line-618"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-619"></a> <span class="n">ret</span><span class="o">++</span><span class="p">;</span> +<a name="line-620"></a> <span class="p">}</span> +<a name="line-621"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span> +<a name="line-622"></a> <span class="p">}</span> +<a name="line-623"></a> <span class="k">return</span> <span class="n">ret</span><span class="p">;</span> +<a name="line-624"></a><span class="p">}</span> +<a name="line-625"></a> +<a name="line-626"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-627"></a><span class="n">get_file_items_callback</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">response</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">)</span> +<a name="line-628"></a><span class="p">{</span> +<a name="line-629"></a> <span class="n">GAsyncQueue</span> <span class="o">*</span><span class="n">reply_queue</span> <span class="o">=</span> <span class="n">ud</span><span class="p">;</span> +<a name="line-630"></a> +<a name="line-631"></a> <span class="cm">/* queue_push doesn't accept NULL as a value so we create an empty hash table</span> +<a name="line-632"></a><span class="cm"> * if we got no response. */</span> +<a name="line-633"></a> <span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span> <span class="n">response</span> <span class="o">?</span> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">response</span><span class="p">)</span> <span class="o">:</span> +<a name="line-634"></a> <span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">));</span> +<a name="line-635"></a> <span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a name="line-636"></a><span class="p">}</span> +<a name="line-637"></a> +<a name="line-638"></a> +<a name="line-639"></a><span class="k">static</span> <span class="n">GList</span> <span class="o">*</span> +<a name="line-640"></a><span class="n">caja_dropbox_get_file_items</span><span class="p">(</span><span class="n">CajaMenuProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a name="line-641"></a> <span class="n">GtkWidget</span> <span class="o">*</span><span class="n">window</span><span class="p">,</span> +<a name="line-642"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">)</span> +<a name="line-643"></a><span class="p">{</span> +<a name="line-644"></a> <span class="cm">/*</span> +<a name="line-645"></a><span class="cm"> * 1. Convert files to filenames.</span> +<a name="line-646"></a><span class="cm"> */</span> +<a name="line-647"></a> <span class="kt">int</span> <span class="n">file_count</span> <span class="o">=</span> <span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">);</span> +<a name="line-648"></a> +<a name="line-649"></a> <span class="k">if</span> <span class="p">(</span><span class="n">file_count</span> <span class="o"><</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-650"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-651"></a> +<a name="line-652"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">paths</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="n">file_count</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-653"></a> <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-654"></a> <span class="n">GList</span><span class="o">*</span> <span class="n">elem</span><span class="p">;</span> +<a name="line-655"></a> +<a name="line-656"></a> <span class="k">for</span> <span class="p">(</span><span class="n">elem</span> <span class="o">=</span> <span class="n">files</span><span class="p">;</span> <span class="n">elem</span><span class="p">;</span> <span class="n">elem</span> <span class="o">=</span> <span class="n">elem</span><span class="o">-></span><span class="n">next</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-657"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">elem</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> +<a name="line-658"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename_un</span> <span class="o">=</span> <span class="n">uri</span> <span class="o">?</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-659"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span> <span class="o">=</span> <span class="n">filename_un</span> <span class="o">?</span> <span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</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> <span class="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-660"></a> +<a name="line-661"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a name="line-662"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span> +<a name="line-663"></a> +<a name="line-664"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-665"></a> <span class="cm">/* oooh, filename wasn't correctly encoded, or isn't a local file. */</span> +<a name="line-666"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span> +<a name="line-667"></a> <span class="k">return</span> <span class="nb">NULL</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="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">filename</span><span class="p">;</span> +<a name="line-671"></a> <span class="p">}</span> +<a name="line-672"></a> +<a name="line-673"></a> <span class="n">GAsyncQueue</span> <span class="o">*</span><span class="n">reply_queue</span> <span class="o">=</span> <span class="n">g_async_queue_new_full</span><span class="p">((</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="n">g_hash_table_unref</span><span class="p">);</span> +<a name="line-674"></a> +<a name="line-675"></a> <span class="cm">/*</span> +<a name="line-676"></a><span class="cm"> * 2. Create a DropboxGeneralCommand to call "icon_overlay_context_options"</span> +<a name="line-677"></a><span class="cm"> */</span> +<a name="line-678"></a> +<a name="line-679"></a> <span class="n">DropboxGeneralCommand</span> <span class="o">*</span><span class="n">dgc</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-680"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a name="line-681"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_options"</span><span class="p">);</span> +<a name="line-682"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-683"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-684"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-685"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_strfreev</span><span class="p">);</span> +<a name="line-686"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span> <span class="n">paths</span><span class="p">);</span> +<a name="line-687"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">handler</span> <span class="o">=</span> <span class="n">get_file_items_callback</span><span class="p">;</span> +<a name="line-688"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span> <span class="o">=</span> <span class="n">g_async_queue_ref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a name="line-689"></a> +<a name="line-690"></a> <span class="cm">/*</span> +<a name="line-691"></a><span class="cm"> * 3. Queue it up for the helper thread to run it.</span> +<a name="line-692"></a><span class="cm"> */</span> +<a name="line-693"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span> <span class="o">=</span> <span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span> +<a name="line-694"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dgc</span><span class="p">);</span> +<a name="line-695"></a> +<a name="line-696"></a> <span class="cm">/*</span> +<a name="line-697"></a><span class="cm"> * 4. We have to block until it's done because caja expects a reply. But we will</span> +<a name="line-698"></a><span class="cm"> * only block for 50 ms for a reply.</span> +<a name="line-699"></a><span class="cm"> */</span> +<a name="line-700"></a> +<a name="line-701"></a> <span class="n">GHashTable</span> <span class="o">*</span><span class="n">context_options_response</span> <span class="o">=</span> <span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span> <span class="mi">50000</span><span class="p">);</span> +<a name="line-702"></a> <span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</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">context_options_response</span><span class="p">)</span> <span class="p">{</span> +<a name="line-705"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-706"></a> <span class="p">}</span> +<a name="line-707"></a> +<a name="line-708"></a> <span class="cm">/*</span> +<a name="line-709"></a><span class="cm"> * 5. Parse the reply.</span> +<a name="line-710"></a><span class="cm"> */</span> +<a name="line-711"></a> +<a name="line-712"></a> <span class="kt">char</span> <span class="o">**</span><span class="n">options</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">,</span> <span class="s">"options"</span><span class="p">);</span> +<a name="line-713"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-714"></a> +<a name="line-715"></a> <span class="k">if</span> <span class="p">(</span><span class="n">options</span> <span class="o">&&</span> <span class="o">*</span><span class="n">options</span> <span class="o">&&</span> <span class="o">**</span><span class="n">options</span><span class="p">)</span> <span class="p">{</span> +<a name="line-716"></a> <span class="cm">/* build the menu */</span> +<a name="line-717"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">root_item</span><span class="p">;</span> +<a name="line-718"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">root_menu</span><span class="p">;</span> +<a name="line-719"></a> +<a name="line-720"></a> <span class="n">root_menu</span> <span class="o">=</span> <span class="n">caja_menu_new</span><span class="p">();</span> +<a name="line-721"></a> <span class="n">root_item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="s">"CajaDropbox::root_item"</span><span class="p">,</span> +<a name="line-722"></a> <span class="s">"Dropbox"</span><span class="p">,</span> <span class="s">"Dropbox Options"</span><span class="p">,</span> <span class="s">"dropbox"</span><span class="p">);</span> +<a name="line-723"></a> +<a name="line-724"></a> <span class="n">toret</span> <span class="o">=</span> <span class="n">g_list_append</span><span class="p">(</span><span class="n">toret</span><span class="p">,</span> <span class="n">root_item</span><span class="p">);</span> +<a name="line-725"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="s">"CajaDropbox::"</span><span class="p">);</span> +<a name="line-726"></a> +<a name="line-727"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">root_menu</span><span class="p">,</span> <span class="n">action_string</span><span class="p">,</span> +<a name="line-728"></a> <span class="n">toret</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">files</span><span class="p">))</span> <span class="p">{</span> +<a name="line-729"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">toret</span><span class="p">);</span> +<a name="line-730"></a> <span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-731"></a> <span class="p">}</span> +<a name="line-732"></a> +<a name="line-733"></a> <span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">root_item</span><span class="p">,</span> <span class="n">root_menu</span><span class="p">);</span> +<a name="line-734"></a> +<a name="line-735"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-736"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">root_menu</span><span class="p">);</span> +<a name="line-737"></a> <span class="p">}</span> +<a name="line-738"></a> +<a name="line-739"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">);</span> +<a name="line-740"></a> +<a name="line-741"></a> <span class="k">return</span> <span class="n">toret</span><span class="p">;</span> +<a name="line-742"></a><span class="p">}</span> +<a name="line-743"></a> +<a name="line-744"></a><span class="n">gboolean</span> +<a name="line-745"></a><span class="n">add_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span> <span class="n">emblem_paths_response</span><span class="p">)</span> +<a name="line-746"></a><span class="p">{</span> +<a name="line-747"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a name="line-748"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="error2"><--- Assuming that condition '!emblem_paths_response' is not redundant</span> +</span><a name="line-749"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-750"></a> +<a name="line-751"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">emblem_paths_list</span><span class="p">;</span> +<a name="line-752"></a><span class="hll"> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-753"></a> +<a name="line-754"></a> <span class="n">GtkIconTheme</span> <span class="o">*</span><span class="n">theme</span> <span class="o">=</span> <span class="n">gtk_icon_theme_get_default</span><span class="p">();</span> +<a name="line-755"></a> +<a name="line-756"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_response</span> <span class="o">&&</span><span class="error2"><--- Condition 'emblem_paths_response' is always true</span> +</span><a name="line-757"></a> <span class="p">(</span><span class="n">emblem_paths_list</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">)))</span> <span class="p">{</span> +<a name="line-758"></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">emblem_paths_list</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-759"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> +<a name="line-760"></a> <span class="n">gtk_icon_theme_append_search_path</span><span class="p">(</span><span class="n">theme</span><span class="p">,</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-761"></a> <span class="p">}</span> +<a name="line-762"></a> <span class="p">}</span> +<a name="line-763"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a name="line-764"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-765"></a><span class="p">}</span> +<a name="line-766"></a> +<a name="line-767"></a><span class="n">gboolean</span> +<a name="line-768"></a><span class="n">remove_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span> <span class="n">emblem_paths_response</span><span class="p">)</span> +<a name="line-769"></a><span class="p">{</span> +<a name="line-770"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a name="line-771"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span> +<a name="line-772"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-773"></a> +<a name="line-774"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">emblem_paths_list</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">);</span> +<a name="line-775"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_list</span><span class="p">)</span> +<a name="line-776"></a> <span class="k">goto</span> <span class="n">exit</span><span class="p">;</span> +<a name="line-777"></a> +<a name="line-778"></a> <span class="c1">// We need to remove the old paths.</span> +<a name="line-779"></a> <span class="n">GtkIconTheme</span> <span class="o">*</span> <span class="n">icon_theme</span> <span class="o">=</span> <span class="n">gtk_icon_theme_get_default</span><span class="p">();</span> +<a name="line-780"></a> <span class="n">gchar</span> <span class="o">**</span> <span class="n">paths</span><span class="p">;</span> +<a name="line-781"></a> <span class="n">gint</span> <span class="n">path_count</span><span class="p">;</span> +<a name="line-782"></a> +<a name="line-783"></a> <span class="n">gtk_icon_theme_get_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span> <span class="o">&</span><span class="n">paths</span><span class="p">,</span> <span class="o">&</span><span class="n">path_count</span><span class="p">);</span> +<a name="line-784"></a> +<a name="line-785"></a> <span class="n">gint</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-786"></a> <span class="n">gboolean</span> <span class="n">found</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-787"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">path_count</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-788"></a> <span class="n">gboolean</span> <span class="n">keep</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-789"></a> <span class="k">for</span> <span class="p">(</span><span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">j</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-790"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="p">{</span> +<a name="line-791"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">g_strcmp0</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span> <span class="p">{</span> +<a name="line-792"></a> <span class="n">found</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-793"></a> <span class="n">keep</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-794"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-795"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-796"></a> <span class="p">}</span> +<a name="line-797"></a> <span class="p">}</span> +<a name="line-798"></a> <span class="p">}</span> +<a name="line-799"></a> <span class="k">if</span> <span class="p">(</span><span class="n">keep</span><span class="p">)</span> <span class="p">{</span> +<a name="line-800"></a> <span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span> <span class="o">=</span> <span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a name="line-801"></a> <span class="n">out</span><span class="o">++</span><span class="p">;</span> +<a name="line-802"></a> <span class="p">}</span> +<a name="line-803"></a> <span class="p">}</span> +<a name="line-804"></a> +<a name="line-805"></a> <span class="cm">/* If we found one we need to reset the path to</span> +<a name="line-806"></a><span class="cm"> accomodate the changes */</span> +<a name="line-807"></a> <span class="k">if</span> <span class="p">(</span><span class="n">found</span><span class="p">)</span> <span class="p">{</span> +<a name="line-808"></a> <span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="cm">/* Clear the last one */</span> +<a name="line-809"></a> <span class="n">gtk_icon_theme_set_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span> <span class="p">(</span><span class="k">const</span> <span class="n">gchar</span> <span class="o">**</span><span class="p">)</span><span class="n">paths</span><span class="p">,</span> <span class="n">out</span><span class="p">);</span> +<a name="line-810"></a> <span class="p">}</span> +<a name="line-811"></a> +<a name="line-812"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span> +<a name="line-813"></a><span class="nl">exit</span><span class="p">:</span> +<a name="line-814"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a name="line-815"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-816"></a><span class="p">}</span> +<a name="line-817"></a> +<a name="line-818"></a><span class="kt">void</span> <span class="n">get_emblem_paths_cb</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> +<a name="line-819"></a><span class="p">{</span> +<a name="line-820"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span> <span class="p">{</span> +<a name="line-821"></a> <span class="n">emblem_paths_response</span> <span class="o">=</span> <span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-822"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">);</span> +<a name="line-823"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">,</span> <span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">);</span> +<a name="line-824"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-825"></a> <span class="cm">/* Increase the ref so that finish_general_command doesn't delete it. */</span> +<a name="line-826"></a> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a name="line-827"></a> <span class="p">}</span> +<a name="line-828"></a> +<a name="line-829"></a> <span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-830"></a> <span class="k">if</span> <span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">)</span> <span class="p">{</span> +<a name="line-831"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">remove_emblem_paths</span><span class="p">,</span> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span> +<a name="line-832"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-833"></a> <span class="p">}</span> +<a name="line-834"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="n">emblem_paths_response</span><span class="p">;</span> +<a name="line-835"></a> <span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-836"></a> +<a name="line-837"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">add_emblem_paths</span><span class="p">,</span> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">));</span> +<a name="line-838"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">reset_all_files</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-839"></a><span class="p">}</span> +<a name="line-840"></a> +<a name="line-841"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-842"></a><span class="n">on_connect</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-843"></a> <span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span> +<a name="line-844"></a> +<a name="line-845"></a> <span class="n">dropbox_command_client_send_command</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> +<a name="line-846"></a> <span class="p">(</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)</span> <span class="n">get_emblem_paths_cb</span><span class="p">,</span> +<a name="line-847"></a><span class="hll"> <span class="n">cvs</span><span class="p">,</span> <span class="s">"get_emblem_paths"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span><div class="verbose expandable"><span class="error2"><--- Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. <span class="marker">[+]</span></span><div class="content">Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. +The C99 standard, in section 7.15.1.1, states that if the type used by va_arg() is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined. +The value of the NULL macro is an implementation-defined null pointer constant (7.17), which can be any integer constant expression with the value 0, or such an expression casted to (void*) (6.3.2.3). This includes values like 0, 0L, or even 0LL. +In practice on common architectures, this will cause real crashes if sizeof(int) != sizeof(void*), and NULL is defined to 0 or any other null pointer constant that promotes to int. +To reproduce you might be able to use this little code example on 64bit platforms. If the output includes "ERROR", the sentinel had only 4 out of 8 bytes initialized to zero and was not detected as the final argument to stop argument processing via va_arg(). Changing the 0 to (void*)0 or 0L will make the "ERROR" output go away. +#include <stdarg.h> +#include <stdio.h> + +void f(char *s, ...) { + va_list ap; + va_start(ap,s); + for (;;) { + char *p = va_arg(ap,char*); + printf("%018p, %s\n", p, (long)p & 255 ? p : ""); + if(!p) break; + } + va_end(ap); +} + +void g() { + char *s2 = "x"; + char *s3 = "ERROR"; + + // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64 + f("first", s2, s2, s2, s2, s2, 0, s3, (char*)0); +} + +void h() { + int i; + volatile unsigned char a[1000]; + for (i = 0; i<sizeof(a); i++) + a[i] = -1; +} + +int main() { + h(); + g(); + return 0; +}</div></div> +</span><a name="line-848"></a><span class="p">}</span> +<a name="line-849"></a> +<a name="line-850"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-851"></a><span class="n">on_disconnect</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-852"></a> <span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span> +<a name="line-853"></a> +<a name="line-854"></a> <span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-855"></a> <span class="cm">/* This call will free the data too. */</span> +<a name="line-856"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">remove_emblem_paths</span><span class="p">,</span> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span> +<a name="line-857"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-858"></a> <span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-859"></a><span class="p">}</span> +<a name="line-860"></a> +<a name="line-861"></a> +<a name="line-862"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-863"></a><span class="n">caja_dropbox_menu_provider_iface_init</span> <span class="p">(</span><span class="n">CajaMenuProviderIface</span> <span class="o">*</span><span class="n">iface</span><span class="p">)</span> <span class="p">{</span> +<a name="line-864"></a> <span class="n">iface</span><span class="o">-></span><span class="n">get_file_items</span> <span class="o">=</span> <span class="n">caja_dropbox_get_file_items</span><span class="p">;</span> +<a name="line-865"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-866"></a><span class="p">}</span> +<a name="line-867"></a> +<a name="line-868"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-869"></a><span class="n">caja_dropbox_info_provider_iface_init</span> <span class="p">(</span><span class="n">CajaInfoProviderIface</span> <span class="o">*</span><span class="n">iface</span><span class="p">)</span> <span class="p">{</span> +<a name="line-870"></a> <span class="n">iface</span><span class="o">-></span><span class="n">update_file_info</span> <span class="o">=</span> <span class="n">caja_dropbox_update_file_info</span><span class="p">;</span> +<a name="line-871"></a> <span class="n">iface</span><span class="o">-></span><span class="n">cancel_update</span> <span class="o">=</span> <span class="n">caja_dropbox_cancel_update</span><span class="p">;</span> +<a name="line-872"></a> <span class="k">return</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">static</span> <span class="kt">void</span> +<a name="line-876"></a><span class="n">caja_dropbox_instance_init</span> <span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a name="line-877"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a name="line-878"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a name="line-879"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a name="line-880"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-881"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_direct_hash</span><span class="p">,</span> +<a name="line-882"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_direct_equal</span><span class="p">,</span> +<a name="line-883"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-884"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">);</span> +<a name="line-885"></a> <span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a name="line-886"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-887"></a> +<a name="line-888"></a> <span class="cm">/* setup the connection obj*/</span> +<a name="line-889"></a> <span class="n">dropbox_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span> +<a name="line-890"></a> +<a name="line-891"></a> <span class="cm">/* our hooks */</span> +<a name="line-892"></a> <span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span> <span class="s">"shell_touch"</span><span class="p">,</span> +<a name="line-893"></a> <span class="p">(</span><span class="n">DropboxUpdateHook</span><span class="p">)</span> <span class="n">handle_shell_touch</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a name="line-894"></a> +<a name="line-895"></a> <span class="cm">/* add connection handlers */</span> +<a name="line-896"></a> <span class="n">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span> +<a name="line-897"></a> <span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span> <span class="n">on_connect</span><span class="p">,</span> +<a name="line-898"></a> <span class="n">cvs</span><span class="p">);</span> +<a name="line-899"></a> <span class="n">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span> +<a name="line-900"></a> <span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span> <span class="n">on_disconnect</span><span class="p">,</span> +<a name="line-901"></a> <span class="n">cvs</span><span class="p">);</span> +<a name="line-902"></a> +<a name="line-903"></a> <span class="cm">/* now start the connection */</span> +<a name="line-904"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"about to start client connection"</span><span class="p">);</span> +<a name="line-905"></a> <span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span> +<a name="line-906"></a> +<a name="line-907"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-908"></a><span class="p">}</span> +<a name="line-909"></a> +<a name="line-910"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-911"></a><span class="n">caja_dropbox_class_init</span> <span class="p">(</span><span class="n">CajaDropboxClass</span> <span class="o">*</span><span class="n">class</span><span class="p">)</span> <span class="p">{</span> +<a name="line-912"></a><span class="p">}</span> +<a name="line-913"></a> +<a name="line-914"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-915"></a><span class="n">caja_dropbox_class_finalize</span> <span class="p">(</span><span class="n">CajaDropboxClass</span> <span class="o">*</span><span class="n">class</span><span class="p">)</span> <span class="p">{</span> +<a name="line-916"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"just checking"</span><span class="p">);</span> +<a name="line-917"></a> <span class="cm">/* kill threads here? */</span> +<a name="line-918"></a><span class="p">}</span> +<a name="line-919"></a> +<a name="line-920"></a><span class="n">GType</span> +<a name="line-921"></a><span class="n">caja_dropbox_get_type</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span> +<a name="line-922"></a> <span class="k">return</span> <span class="n">dropbox_type</span><span class="p">;</span> +<a name="line-923"></a><span class="p">}</span> +<a name="line-924"></a> +<a name="line-925"></a><span class="kt">void</span> +<a name="line-926"></a><span class="n">caja_dropbox_register_type</span> <span class="p">(</span><span class="n">GTypeModule</span> <span class="o">*</span><span class="n">module</span><span class="p">)</span> <span class="p">{</span> +<a name="line-927"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GTypeInfo</span> <span class="n">info</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-928"></a> <span class="k">sizeof</span> <span class="p">(</span><span class="n">CajaDropboxClass</span><span class="p">),</span> +<a name="line-929"></a> <span class="p">(</span><span class="n">GBaseInitFunc</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-930"></a> <span class="p">(</span><span class="n">GBaseFinalizeFunc</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-931"></a> <span class="p">(</span><span class="n">GClassInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_class_init</span><span class="p">,</span> +<a name="line-932"></a> <span class="p">(</span><span class="n">GClassFinalizeFunc</span><span class="p">)</span> <span class="n">caja_dropbox_class_finalize</span><span class="p">,</span> +<a name="line-933"></a> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-934"></a> <span class="k">sizeof</span> <span class="p">(</span><span class="n">CajaDropbox</span><span class="p">),</span> +<a name="line-935"></a> <span class="mi">0</span><span class="p">,</span> +<a name="line-936"></a> <span class="p">(</span><span class="n">GInstanceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_instance_init</span><span class="p">,</span> +<a name="line-937"></a> <span class="p">};</span> +<a name="line-938"></a> +<a name="line-939"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GInterfaceInfo</span> <span class="n">menu_provider_iface_info</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-940"></a> <span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_menu_provider_iface_init</span><span class="p">,</span> +<a name="line-941"></a> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-942"></a> <span class="nb">NULL</span> +<a name="line-943"></a> <span class="p">};</span> +<a name="line-944"></a> +<a name="line-945"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GInterfaceInfo</span> <span class="n">info_provider_iface_info</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-946"></a> <span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_info_provider_iface_init</span><span class="p">,</span> +<a name="line-947"></a> <span class="nb">NULL</span><span class="p">,</span> +<a name="line-948"></a> <span class="nb">NULL</span> +<a name="line-949"></a> <span class="p">};</span> +<a name="line-950"></a> +<a name="line-951"></a> <span class="n">dropbox_type</span> <span class="o">=</span> +<a name="line-952"></a> <span class="n">g_type_module_register_type</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a name="line-953"></a> <span class="n">G_TYPE_OBJECT</span><span class="p">,</span> +<a name="line-954"></a> <span class="s">"CajaDropbox"</span><span class="p">,</span> +<a name="line-955"></a> <span class="o">&</span><span class="n">info</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-956"></a> +<a name="line-957"></a> <span class="n">g_type_module_add_interface</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a name="line-958"></a> <span class="n">dropbox_type</span><span class="p">,</span> +<a name="line-959"></a> <span class="n">CAJA_TYPE_MENU_PROVIDER</span><span class="p">,</span> +<a name="line-960"></a> <span class="o">&</span><span class="n">menu_provider_iface_info</span><span class="p">);</span> +<a name="line-961"></a> +<a name="line-962"></a> <span class="n">g_type_module_add_interface</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a name="line-963"></a> <span class="n">dropbox_type</span><span class="p">,</span> +<a name="line-964"></a> <span class="n">CAJA_TYPE_INFO_PROVIDER</span><span class="p">,</span> +<a name="line-965"></a> <span class="o">&</span><span class="n">info_provider_iface_info</span><span class="p">);</span> +<a name="line-966"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.5 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/index.html b/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/index.html new file mode 100644 index 0000000..303d30f --- /dev/null +++ b/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/index.html @@ -0,0 +1,122 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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 - caja-dropbox: </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>2</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>1</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="missingIncludeSystem" name="missingIncludeSystem" checked></td><td>1</td><td>missingIncludeSystem</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="varFuncNullUB" name="varFuncNullUB" checked></td><td>1</td><td>varFuncNullUB</td></tr> + <tr><td></td><td>5</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="1.html"></a></td></tr> + <tr class="missingIncludeSystem"><td><a href="1.html#line-0">0</a></td><td>missingIncludeSystem</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">src/caja-dropbox.c</a></td></tr> + <tr class="variableScope"><td><a href="0.html#line-312">312</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 'file' can be reduced.</td></tr> + <tr class="variableScope"><td><a href="0.html#line-752">752</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 'i' can be reduced.</td></tr> + <tr class="knownConditionTrueFalse"><td><a href="0.html#line-756">756</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td >Condition 'emblem_paths_response' is always true</td></tr> + <tr class="varFuncNullUB"><td><a href="0.html#line-847">847</a></td><td>varFuncNullUB</td><td><a href="https://cwe.mitre.org/data/definitions/475.html">475</a></td><td>portability</td><td >Passing NULL after the last typed argument to a variadic function leads to undefined behaviour.</td></tr> + </table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.5 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/stats.html b/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/stats.html new file mode 100644 index 0000000..5007565 --- /dev/null +++ b/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/stats.html @@ -0,0 +1,108 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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 - caja-dropbox: 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 portability severity, total findings: 1<br> +   1 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> +<p>Top 10 files for style severity, total findings: 3<br> +   3 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> + + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.5 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/style.css b/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/style.css new file mode 100644 index 0000000..07125f4 --- /dev/null +++ b/2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/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; +} diff --git a/2022-02-12-111711-5932-1@f4453b2d7fce_master/index.html b/2022-02-12-111711-5932-1@f4453b2d7fce_master/index.html new file mode 100644 index 0000000..2af4432 --- /dev/null +++ b/2022-02-12-111711-5932-1@f4453b2d7fce_master/index.html @@ -0,0 +1,97 @@ +<html> +<head> +<title>rootdir - scan-build results</title> +<link type="text/css" rel="stylesheet" href="scanview.css"/> +<script src="sorttable.js"></script> +<script language='javascript' type="text/javascript"> +function SetDisplay(RowClass, DisplayVal) +{ + var Rows = document.getElementsByTagName("tr"); + for ( var i = 0 ; i < Rows.length; ++i ) { + if (Rows[i].className == RowClass) { + Rows[i].style.display = DisplayVal; + } + } +} + +function CopyCheckedStateToCheckButtons(SummaryCheckButton) { + var Inputs = document.getElementsByTagName("input"); + for ( var i = 0 ; i < Inputs.length; ++i ) { + if (Inputs[i].type == "checkbox") { + if(Inputs[i] != SummaryCheckButton) { + Inputs[i].checked = SummaryCheckButton.checked; + Inputs[i].onclick(); + } + } + } +} + +function returnObjById( id ) { + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +var NumUnchecked = 0; + +function ToggleDisplay(CheckButton, ClassName) { + if (CheckButton.checked) { + SetDisplay(ClassName, ""); + if (--NumUnchecked == 0) { + returnObjById("AllBugsCheck").checked = true; + } + } + else { + SetDisplay(ClassName, "none"); + NumUnchecked++; + returnObjById("AllBugsCheck").checked = false; + } +} +</script> +<!-- SUMMARYENDHEAD --> +</head> +<body> +<h1>rootdir - scan-build results</h1> + +<table> +<tr><th>User:</th><td>root@20d74a68e41b</td></tr> +<tr><th>Working Directory:</th><td>/rootdir</td></tr> +<tr><th>Command Line:</th><td>make -j 2</td></tr> +<tr><th>Clang Version:</th><td>clang version 13.0.0 (Fedora 13.0.0-3.fc35) +</td></tr> +<tr><th>Date:</th><td>Sat Feb 12 11:17:11 2022</td></tr> +</table> +<h2>Bug Summary</h2><table> +<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead> +<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">2</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr> +<tr><th>Logic error</th><th colspan=2></th></tr> +<tr><td class="SUMM_DESC">Cast from non-struct type to struct type</td><td class="Q">2</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_cast_from_non-struct_type_to_struct_type');" checked/></center></td></tr> +</table> +<h2>Reports</h2> + +<table class="sortable" style="table-layout:automatic"> +<thead><tr> + <td>Bug Group</td> + <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind"> ▾</span></td> + <td>File</td> + <td>Function/Method</td> + <td class="Q">Line</td> + <td class="Q">Path Length</td> + <td class="sorttable_nosort"></td> + <!-- REPORTBUGCOL --> +</tr></thead> +<tbody> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-51813c.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-51813c.html" --> +</tr> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-b2c20b.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-b2c20b.html" --> +</tr> +</tbody> +</table> + +</body></html> diff --git a/2022-02-12-111711-5932-1@f4453b2d7fce_master/report-51813c.html b/2022-02-12-111711-5932-1@f4453b2d7fce_master/report-51813c.html new file mode 100644 index 0000000..e07aa85 --- /dev/null +++ b/2022-02-12-111711-5932-1@f4453b2d7fce_master/report-51813c.html @@ -0,0 +1,1225 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/13.0.0 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -D PIC -internal-isystem /usr/lib64/clang/13.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/11/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-02-12-111711-5932-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "S") { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].checked = !checked; + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> +</form> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + s.classList.remove("selected"); + }); + el.classList.add("selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); +} + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "j") { + navigateTo(/*up=*/false); + } else if (event.key == "k") { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2022-02-12-111711-5932-1@f4453b2d7fce_master/report-b2c20b.html b/2022-02-12-111711-5932-1@f4453b2d7fce_master/report-b2c20b.html new file mode 100644 index 0000000..ce01b1a --- /dev/null +++ b/2022-02-12-111711-5932-1@f4453b2d7fce_master/report-b2c20b.html @@ -0,0 +1,1225 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model static -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/13.0.0 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -internal-isystem /usr/lib64/clang/13.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/11/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-02-12-111711-5932-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "S") { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].checked = !checked; + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> +</form> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + s.classList.remove("selected"); + }); + el.classList.add("selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); +} + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "j") { + navigateTo(/*up=*/false); + } else if (event.key == "k") { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2022-02-12-111711-5932-1@f4453b2d7fce_master/scanview.css b/2022-02-12-111711-5932-1@f4453b2d7fce_master/scanview.css new file mode 100644 index 0000000..cf8a5a6 --- /dev/null +++ b/2022-02-12-111711-5932-1@f4453b2d7fce_master/scanview.css @@ -0,0 +1,62 @@ +body { color:#000000; background-color:#ffffff } +body { font-family: Helvetica, sans-serif; font-size:9pt } +h1 { font-size: 14pt; } +h2 { font-size: 12pt; } +table { font-size:9pt } +table { border-spacing: 0px; border: 1px solid black } +th, table thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + font-weight: bold; font-family: Verdana; + white-space:nowrap; +} +.W { font-size:0px } +th, td { padding:5px; padding-left:8px; text-align:left } +td.SUMM_DESC { padding-left:12px } +td.DESC { white-space:pre } +td.Q { text-align:right } +td { text-align:left } +tbody.scrollContent { overflow:auto } + +table.form_group { + background-color: #ccc; + border: 1px solid #333; + padding: 2px; +} + +table.form_inner_group { + background-color: #ccc; + border: 1px solid #333; + padding: 0px; +} + +table.form { + background-color: #999; + border: 1px solid #333; + padding: 2px; +} + +td.form_label { + text-align: right; + vertical-align: top; +} +/* For one line entires */ +td.form_clabel { + text-align: right; + vertical-align: center; +} +td.form_value { + text-align: left; + vertical-align: top; +} +td.form_submit { + text-align: right; + vertical-align: top; +} + +h1.SubmitFail { + color: #f00; +} +h1.SubmitOk { +} diff --git a/2022-02-12-111711-5932-1@f4453b2d7fce_master/sorttable.js b/2022-02-12-111711-5932-1@f4453b2d7fce_master/sorttable.js new file mode 100644 index 0000000..32faa07 --- /dev/null +++ b/2022-02-12-111711-5932-1@f4453b2d7fce_master/sorttable.js @@ -0,0 +1,492 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backward compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + //row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[�$�]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; diff --git a/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/0.html b/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/0.html new file mode 100644 index 0000000..9ebf7c6 --- /dev/null +++ b/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/0.html @@ -0,0 +1,2169 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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 - caja-dropbox: src/caja-dropbox.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> caja-dropbox.c</p> +<a href="0.html#line-312"> variableScope 312</a><a href="0.html#line-748"> knownConditionTrueFalse 748</a><a href="0.html#line-752"> variableScope 752</a><a href="0.html#line-756"> knownConditionTrueFalse 756</a><a href="0.html#line-847"> varFuncNullUB 847</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span> +<span class="normal">114</span> +<span class="normal">115</span> +<span class="normal">116</span> +<span class="normal">117</span> +<span class="normal">118</span> +<span class="normal">119</span> +<span class="normal">120</span> +<span class="normal">121</span> +<span class="normal">122</span> +<span class="normal">123</span> +<span class="normal">124</span> +<span class="normal">125</span> +<span class="normal">126</span> +<span class="normal">127</span> +<span class="normal">128</span> +<span class="normal">129</span> +<span class="normal">130</span> +<span class="normal">131</span> +<span class="normal">132</span> +<span class="normal">133</span> +<span class="normal">134</span> +<span class="normal">135</span> +<span class="normal">136</span> +<span class="normal">137</span> +<span class="normal">138</span> +<span class="normal">139</span> +<span class="normal">140</span> +<span class="normal">141</span> +<span class="normal">142</span> +<span class="normal">143</span> +<span class="normal">144</span> +<span class="normal">145</span> +<span class="normal">146</span> +<span class="normal">147</span> +<span class="normal">148</span> +<span class="normal">149</span> +<span class="normal">150</span> +<span class="normal">151</span> +<span class="normal">152</span> +<span class="normal">153</span> +<span class="normal">154</span> +<span class="normal">155</span> +<span class="normal">156</span> +<span class="normal">157</span> +<span class="normal">158</span> +<span class="normal">159</span> +<span class="normal">160</span> +<span class="normal">161</span> +<span class="normal">162</span> +<span class="normal">163</span> +<span class="normal">164</span> +<span class="normal">165</span> +<span class="normal">166</span> +<span class="normal">167</span> +<span class="normal">168</span> +<span class="normal">169</span> +<span class="normal">170</span> +<span class="normal">171</span> +<span class="normal">172</span> +<span class="normal">173</span> +<span class="normal">174</span> +<span class="normal">175</span> +<span class="normal">176</span> +<span class="normal">177</span> +<span class="normal">178</span> +<span class="normal">179</span> +<span class="normal">180</span> +<span class="normal">181</span> +<span class="normal">182</span> +<span class="normal">183</span> +<span class="normal">184</span> +<span class="normal">185</span> +<span class="normal">186</span> +<span class="normal">187</span> +<span class="normal">188</span> +<span class="normal">189</span> +<span class="normal">190</span> +<span class="normal">191</span> +<span class="normal">192</span> +<span class="normal">193</span> +<span class="normal">194</span> +<span class="normal">195</span> +<span class="normal">196</span> +<span class="normal">197</span> +<span class="normal">198</span> +<span class="normal">199</span> +<span class="normal">200</span> +<span class="normal">201</span> +<span class="normal">202</span> +<span class="normal">203</span> +<span class="normal">204</span> +<span class="normal">205</span> +<span class="normal">206</span> +<span class="normal">207</span> +<span class="normal">208</span> +<span class="normal">209</span> +<span class="normal">210</span> +<span class="normal">211</span> +<span class="normal">212</span> +<span class="normal">213</span> +<span class="normal">214</span> +<span class="normal">215</span> +<span class="normal">216</span> +<span class="normal">217</span> +<span class="normal">218</span> +<span class="normal">219</span> +<span class="normal">220</span> +<span class="normal">221</span> +<span class="normal">222</span> +<span class="normal">223</span> +<span class="normal">224</span> +<span class="normal">225</span> +<span class="normal">226</span> +<span class="normal">227</span> +<span class="normal">228</span> +<span class="normal">229</span> +<span class="normal">230</span> +<span class="normal">231</span> +<span class="normal">232</span> +<span class="normal">233</span> +<span class="normal">234</span> +<span class="normal">235</span> +<span class="normal">236</span> +<span class="normal">237</span> +<span class="normal">238</span> +<span class="normal">239</span> +<span class="normal">240</span> +<span class="normal">241</span> +<span class="normal">242</span> +<span class="normal">243</span> +<span class="normal">244</span> +<span class="normal">245</span> +<span class="normal">246</span> +<span class="normal">247</span> +<span class="normal">248</span> +<span class="normal">249</span> +<span class="normal">250</span> +<span class="normal">251</span> +<span class="normal">252</span> +<span class="normal">253</span> +<span class="normal">254</span> +<span class="normal">255</span> +<span class="normal">256</span> +<span class="normal">257</span> +<span class="normal">258</span> +<span class="normal">259</span> +<span class="normal">260</span> +<span class="normal">261</span> +<span class="normal">262</span> +<span class="normal">263</span> +<span class="normal">264</span> +<span class="normal">265</span> +<span class="normal">266</span> +<span class="normal">267</span> +<span class="normal">268</span> +<span class="normal">269</span> +<span class="normal">270</span> +<span class="normal">271</span> +<span class="normal">272</span> +<span class="normal">273</span> +<span class="normal">274</span> +<span class="normal">275</span> +<span class="normal">276</span> +<span class="normal">277</span> +<span class="normal">278</span> +<span class="normal">279</span> +<span class="normal">280</span> +<span class="normal">281</span> +<span class="normal">282</span> +<span class="normal">283</span> +<span class="normal">284</span> +<span class="normal">285</span> +<span class="normal">286</span> +<span class="normal">287</span> +<span class="normal">288</span> +<span class="normal">289</span> +<span class="normal">290</span> +<span class="normal">291</span> +<span class="normal">292</span> +<span class="normal">293</span> +<span class="normal">294</span> +<span class="normal">295</span> +<span class="normal">296</span> +<span class="normal">297</span> +<span class="normal">298</span> +<span class="normal">299</span> +<span class="normal">300</span> +<span class="normal">301</span> +<span class="normal">302</span> +<span class="normal">303</span> +<span class="normal">304</span> +<span class="normal">305</span> +<span class="normal">306</span> +<span class="normal">307</span> +<span class="normal">308</span> +<span class="normal">309</span> +<span class="normal">310</span> +<span class="normal">311</span> +<span class="normal">312</span> +<span class="normal">313</span> +<span class="normal">314</span> +<span class="normal">315</span> +<span class="normal">316</span> +<span class="normal">317</span> +<span class="normal">318</span> +<span class="normal">319</span> +<span class="normal">320</span> +<span class="normal">321</span> +<span class="normal">322</span> +<span class="normal">323</span> +<span class="normal">324</span> +<span class="normal">325</span> +<span class="normal">326</span> +<span class="normal">327</span> +<span class="normal">328</span> +<span class="normal">329</span> +<span class="normal">330</span> +<span class="normal">331</span> +<span class="normal">332</span> +<span class="normal">333</span> +<span class="normal">334</span> +<span class="normal">335</span> +<span class="normal">336</span> +<span class="normal">337</span> +<span class="normal">338</span> +<span class="normal">339</span> +<span class="normal">340</span> +<span class="normal">341</span> +<span class="normal">342</span> +<span class="normal">343</span> +<span class="normal">344</span> +<span class="normal">345</span> +<span class="normal">346</span> +<span class="normal">347</span> +<span class="normal">348</span> +<span class="normal">349</span> +<span class="normal">350</span> +<span class="normal">351</span> +<span class="normal">352</span> +<span class="normal">353</span> +<span class="normal">354</span> +<span class="normal">355</span> +<span class="normal">356</span> +<span class="normal">357</span> +<span class="normal">358</span> +<span class="normal">359</span> +<span class="normal">360</span> +<span class="normal">361</span> +<span class="normal">362</span> +<span class="normal">363</span> +<span class="normal">364</span> +<span class="normal">365</span> +<span class="normal">366</span> +<span class="normal">367</span> +<span class="normal">368</span> +<span class="normal">369</span> +<span class="normal">370</span> +<span class="normal">371</span> +<span class="normal">372</span> +<span class="normal">373</span> +<span class="normal">374</span> +<span class="normal">375</span> +<span class="normal">376</span> +<span class="normal">377</span> +<span class="normal">378</span> +<span class="normal">379</span> +<span class="normal">380</span> +<span class="normal">381</span> +<span class="normal">382</span> +<span class="normal">383</span> +<span class="normal">384</span> +<span class="normal">385</span> +<span class="normal">386</span> +<span class="normal">387</span> +<span class="normal">388</span> +<span class="normal">389</span> +<span class="normal">390</span> +<span class="normal">391</span> +<span class="normal">392</span> +<span class="normal">393</span> +<span class="normal">394</span> +<span class="normal">395</span> +<span class="normal">396</span> +<span class="normal">397</span> +<span class="normal">398</span> +<span class="normal">399</span> +<span class="normal">400</span> +<span class="normal">401</span> +<span class="normal">402</span> +<span class="normal">403</span> +<span class="normal">404</span> +<span class="normal">405</span> +<span class="normal">406</span> +<span class="normal">407</span> +<span class="normal">408</span> +<span class="normal">409</span> +<span class="normal">410</span> +<span class="normal">411</span> +<span class="normal">412</span> +<span class="normal">413</span> +<span class="normal">414</span> +<span class="normal">415</span> +<span class="normal">416</span> +<span class="normal">417</span> +<span class="normal">418</span> +<span class="normal">419</span> +<span class="normal">420</span> +<span class="normal">421</span> +<span class="normal">422</span> +<span class="normal">423</span> +<span class="normal">424</span> +<span class="normal">425</span> +<span class="normal">426</span> +<span class="normal">427</span> +<span class="normal">428</span> +<span class="normal">429</span> +<span class="normal">430</span> +<span class="normal">431</span> +<span class="normal">432</span> +<span class="normal">433</span> +<span class="normal">434</span> +<span class="normal">435</span> +<span class="normal">436</span> +<span class="normal">437</span> +<span class="normal">438</span> +<span class="normal">439</span> +<span class="normal">440</span> +<span class="normal">441</span> +<span class="normal">442</span> +<span class="normal">443</span> +<span class="normal">444</span> +<span class="normal">445</span> +<span class="normal">446</span> +<span class="normal">447</span> +<span class="normal">448</span> +<span class="normal">449</span> +<span class="normal">450</span> +<span class="normal">451</span> +<span class="normal">452</span> +<span class="normal">453</span> +<span class="normal">454</span> +<span class="normal">455</span> +<span class="normal">456</span> +<span class="normal">457</span> +<span class="normal">458</span> +<span class="normal">459</span> +<span class="normal">460</span> +<span class="normal">461</span> +<span class="normal">462</span> +<span class="normal">463</span> +<span class="normal">464</span> +<span class="normal">465</span> +<span class="normal">466</span> +<span class="normal">467</span> +<span class="normal">468</span> +<span class="normal">469</span> +<span class="normal">470</span> +<span class="normal">471</span> +<span class="normal">472</span> +<span class="normal">473</span> +<span class="normal">474</span> +<span class="normal">475</span> +<span class="normal">476</span> +<span class="normal">477</span> +<span class="normal">478</span> +<span class="normal">479</span> +<span class="normal">480</span> +<span class="normal">481</span> +<span class="normal">482</span> +<span class="normal">483</span> +<span class="normal">484</span> +<span class="normal">485</span> +<span class="normal">486</span> +<span class="normal">487</span> +<span class="normal">488</span> +<span class="normal">489</span> +<span class="normal">490</span> +<span class="normal">491</span> +<span class="normal">492</span> +<span class="normal">493</span> +<span class="normal">494</span> +<span class="normal">495</span> +<span class="normal">496</span> +<span class="normal">497</span> +<span class="normal">498</span> +<span class="normal">499</span> +<span class="normal">500</span> +<span class="normal">501</span> +<span class="normal">502</span> +<span class="normal">503</span> +<span class="normal">504</span> +<span class="normal">505</span> +<span class="normal">506</span> +<span class="normal">507</span> +<span class="normal">508</span> +<span class="normal">509</span> +<span class="normal">510</span> +<span class="normal">511</span> +<span class="normal">512</span> +<span class="normal">513</span> +<span class="normal">514</span> +<span class="normal">515</span> +<span class="normal">516</span> +<span class="normal">517</span> +<span class="normal">518</span> +<span class="normal">519</span> +<span class="normal">520</span> +<span class="normal">521</span> +<span class="normal">522</span> +<span class="normal">523</span> +<span class="normal">524</span> +<span class="normal">525</span> +<span class="normal">526</span> +<span class="normal">527</span> +<span class="normal">528</span> +<span class="normal">529</span> +<span class="normal">530</span> +<span class="normal">531</span> +<span class="normal">532</span> +<span class="normal">533</span> +<span class="normal">534</span> +<span class="normal">535</span> +<span class="normal">536</span> +<span class="normal">537</span> +<span class="normal">538</span> +<span class="normal">539</span> +<span class="normal">540</span> +<span class="normal">541</span> +<span class="normal">542</span> +<span class="normal">543</span> +<span class="normal">544</span> +<span class="normal">545</span> +<span class="normal">546</span> +<span class="normal">547</span> +<span class="normal">548</span> +<span class="normal">549</span> +<span class="normal">550</span> +<span class="normal">551</span> +<span class="normal">552</span> +<span class="normal">553</span> +<span class="normal">554</span> +<span class="normal">555</span> +<span class="normal">556</span> +<span class="normal">557</span> +<span class="normal">558</span> +<span class="normal">559</span> +<span class="normal">560</span> +<span class="normal">561</span> +<span class="normal">562</span> +<span class="normal">563</span> +<span class="normal">564</span> +<span class="normal">565</span> +<span class="normal">566</span> +<span class="normal">567</span> +<span class="normal">568</span> +<span class="normal">569</span> +<span class="normal">570</span> +<span class="normal">571</span> +<span class="normal">572</span> +<span class="normal">573</span> +<span class="normal">574</span> +<span class="normal">575</span> +<span class="normal">576</span> +<span class="normal">577</span> +<span class="normal">578</span> +<span class="normal">579</span> +<span class="normal">580</span> +<span class="normal">581</span> +<span class="normal">582</span> +<span class="normal">583</span> +<span class="normal">584</span> +<span class="normal">585</span> +<span class="normal">586</span> +<span class="normal">587</span> +<span class="normal">588</span> +<span class="normal">589</span> +<span class="normal">590</span> +<span class="normal">591</span> +<span class="normal">592</span> +<span class="normal">593</span> +<span class="normal">594</span> +<span class="normal">595</span> +<span class="normal">596</span> +<span class="normal">597</span> +<span class="normal">598</span> +<span class="normal">599</span> +<span class="normal">600</span> +<span class="normal">601</span> +<span class="normal">602</span> +<span class="normal">603</span> +<span class="normal">604</span> +<span class="normal">605</span> +<span class="normal">606</span> +<span class="normal">607</span> +<span class="normal">608</span> +<span class="normal">609</span> +<span class="normal">610</span> +<span class="normal">611</span> +<span class="normal">612</span> +<span class="normal">613</span> +<span class="normal">614</span> +<span class="normal">615</span> +<span class="normal">616</span> +<span class="normal">617</span> +<span class="normal">618</span> +<span class="normal">619</span> +<span class="normal">620</span> +<span class="normal">621</span> +<span class="normal">622</span> +<span class="normal">623</span> +<span class="normal">624</span> +<span class="normal">625</span> +<span class="normal">626</span> +<span class="normal">627</span> +<span class="normal">628</span> +<span class="normal">629</span> +<span class="normal">630</span> +<span class="normal">631</span> +<span class="normal">632</span> +<span class="normal">633</span> +<span class="normal">634</span> +<span class="normal">635</span> +<span class="normal">636</span> +<span class="normal">637</span> +<span class="normal">638</span> +<span class="normal">639</span> +<span class="normal">640</span> +<span class="normal">641</span> +<span class="normal">642</span> +<span class="normal">643</span> +<span class="normal">644</span> +<span class="normal">645</span> +<span class="normal">646</span> +<span class="normal">647</span> +<span class="normal">648</span> +<span class="normal">649</span> +<span class="normal">650</span> +<span class="normal">651</span> +<span class="normal">652</span> +<span class="normal">653</span> +<span class="normal">654</span> +<span class="normal">655</span> +<span class="normal">656</span> +<span class="normal">657</span> +<span class="normal">658</span> +<span class="normal">659</span> +<span class="normal">660</span> +<span class="normal">661</span> +<span class="normal">662</span> +<span class="normal">663</span> +<span class="normal">664</span> +<span class="normal">665</span> +<span class="normal">666</span> +<span class="normal">667</span> +<span class="normal">668</span> +<span class="normal">669</span> +<span class="normal">670</span> +<span class="normal">671</span> +<span class="normal">672</span> +<span class="normal">673</span> +<span class="normal">674</span> +<span class="normal">675</span> +<span class="normal">676</span> +<span class="normal">677</span> +<span class="normal">678</span> +<span class="normal">679</span> +<span class="normal">680</span> +<span class="normal">681</span> +<span class="normal">682</span> +<span class="normal">683</span> +<span class="normal">684</span> +<span class="normal">685</span> +<span class="normal">686</span> +<span class="normal">687</span> +<span class="normal">688</span> +<span class="normal">689</span> +<span class="normal">690</span> +<span class="normal">691</span> +<span class="normal">692</span> +<span class="normal">693</span> +<span class="normal">694</span> +<span class="normal">695</span> +<span class="normal">696</span> +<span class="normal">697</span> +<span class="normal">698</span> +<span class="normal">699</span> +<span class="normal">700</span> +<span class="normal">701</span> +<span class="normal">702</span> +<span class="normal">703</span> +<span class="normal">704</span> +<span class="normal">705</span> +<span class="normal">706</span> +<span class="normal">707</span> +<span class="normal">708</span> +<span class="normal">709</span> +<span class="normal">710</span> +<span class="normal">711</span> +<span class="normal">712</span> +<span class="normal">713</span> +<span class="normal">714</span> +<span class="normal">715</span> +<span class="normal">716</span> +<span class="normal">717</span> +<span class="normal">718</span> +<span class="normal">719</span> +<span class="normal">720</span> +<span class="normal">721</span> +<span class="normal">722</span> +<span class="normal">723</span> +<span class="normal">724</span> +<span class="normal">725</span> +<span class="normal">726</span> +<span class="normal">727</span> +<span class="normal">728</span> +<span class="normal">729</span> +<span class="normal">730</span> +<span class="normal">731</span> +<span class="normal">732</span> +<span class="normal">733</span> +<span class="normal">734</span> +<span class="normal">735</span> +<span class="normal">736</span> +<span class="normal">737</span> +<span class="normal">738</span> +<span class="normal">739</span> +<span class="normal">740</span> +<span class="normal">741</span> +<span class="normal">742</span> +<span class="normal">743</span> +<span class="normal">744</span> +<span class="normal">745</span> +<span class="normal">746</span> +<span class="normal">747</span> +<span class="normal">748</span> +<span class="normal">749</span> +<span class="normal">750</span> +<span class="normal">751</span> +<span class="normal">752</span> +<span class="normal">753</span> +<span class="normal">754</span> +<span class="normal">755</span> +<span class="normal">756</span> +<span class="normal">757</span> +<span class="normal">758</span> +<span class="normal">759</span> +<span class="normal">760</span> +<span class="normal">761</span> +<span class="normal">762</span> +<span class="normal">763</span> +<span class="normal">764</span> +<span class="normal">765</span> +<span class="normal">766</span> +<span class="normal">767</span> +<span class="normal">768</span> +<span class="normal">769</span> +<span class="normal">770</span> +<span class="normal">771</span> +<span class="normal">772</span> +<span class="normal">773</span> +<span class="normal">774</span> +<span class="normal">775</span> +<span class="normal">776</span> +<span class="normal">777</span> +<span class="normal">778</span> +<span class="normal">779</span> +<span class="normal">780</span> +<span class="normal">781</span> +<span class="normal">782</span> +<span class="normal">783</span> +<span class="normal">784</span> +<span class="normal">785</span> +<span class="normal">786</span> +<span class="normal">787</span> +<span class="normal">788</span> +<span class="normal">789</span> +<span class="normal">790</span> +<span class="normal">791</span> +<span class="normal">792</span> +<span class="normal">793</span> +<span class="normal">794</span> +<span class="normal">795</span> +<span class="normal">796</span> +<span class="normal">797</span> +<span class="normal">798</span> +<span class="normal">799</span> +<span class="normal">800</span> +<span class="normal">801</span> +<span class="normal">802</span> +<span class="normal">803</span> +<span class="normal">804</span> +<span class="normal">805</span> +<span class="normal">806</span> +<span class="normal">807</span> +<span class="normal">808</span> +<span class="normal">809</span> +<span class="normal">810</span> +<span class="normal">811</span> +<span class="normal">812</span> +<span class="normal">813</span> +<span class="normal">814</span> +<span class="normal">815</span> +<span class="normal">816</span> +<span class="normal">817</span> +<span class="normal">818</span> +<span class="normal">819</span> +<span class="normal">820</span> +<span class="normal">821</span> +<span class="normal">822</span> +<span class="normal">823</span> +<span class="normal">824</span> +<span class="normal">825</span> +<span class="normal">826</span> +<span class="normal">827</span> +<span class="normal">828</span> +<span class="normal">829</span> +<span class="normal">830</span> +<span class="normal">831</span> +<span class="normal">832</span> +<span class="normal">833</span> +<span class="normal">834</span> +<span class="normal">835</span> +<span class="normal">836</span> +<span class="normal">837</span> +<span class="normal">838</span> +<span class="normal">839</span> +<span class="normal">840</span> +<span class="normal">841</span> +<span class="normal">842</span> +<span class="normal">843</span> +<span class="normal">844</span> +<span class="normal">845</span> +<span class="normal">846</span> +<span class="normal">847</span> +<span class="normal">848</span> +<span class="normal">849</span> +<span class="normal">850</span> +<span class="normal">851</span> +<span class="normal">852</span> +<span class="normal">853</span> +<span class="normal">854</span> +<span class="normal">855</span> +<span class="normal">856</span> +<span class="normal">857</span> +<span class="normal">858</span> +<span class="normal">859</span> +<span class="normal">860</span> +<span class="normal">861</span> +<span class="normal">862</span> +<span class="normal">863</span> +<span class="normal">864</span> +<span class="normal">865</span> +<span class="normal">866</span> +<span class="normal">867</span> +<span class="normal">868</span> +<span class="normal">869</span> +<span class="normal">870</span> +<span class="normal">871</span> +<span class="normal">872</span> +<span class="normal">873</span> +<span class="normal">874</span> +<span class="normal">875</span> +<span class="normal">876</span> +<span class="normal">877</span> +<span class="normal">878</span> +<span class="normal">879</span> +<span class="normal">880</span> +<span class="normal">881</span> +<span class="normal">882</span> +<span class="normal">883</span> +<span class="normal">884</span> +<span class="normal">885</span> +<span class="normal">886</span> +<span class="normal">887</span> +<span class="normal">888</span> +<span class="normal">889</span> +<span class="normal">890</span> +<span class="normal">891</span> +<span class="normal">892</span> +<span class="normal">893</span> +<span class="normal">894</span> +<span class="normal">895</span> +<span class="normal">896</span> +<span class="normal">897</span> +<span class="normal">898</span> +<span class="normal">899</span> +<span class="normal">900</span> +<span class="normal">901</span> +<span class="normal">902</span> +<span class="normal">903</span> +<span class="normal">904</span> +<span class="normal">905</span> +<span class="normal">906</span> +<span class="normal">907</span> +<span class="normal">908</span> +<span class="normal">909</span> +<span class="normal">910</span> +<span class="normal">911</span> +<span class="normal">912</span> +<span class="normal">913</span> +<span class="normal">914</span> +<span class="normal">915</span> +<span class="normal">916</span> +<span class="normal">917</span> +<span class="normal">918</span> +<span class="normal">919</span> +<span class="normal">920</span> +<span class="normal">921</span> +<span class="normal">922</span> +<span class="normal">923</span> +<span class="normal">924</span> +<span class="normal">925</span> +<span class="normal">926</span> +<span class="normal">927</span> +<span class="normal">928</span> +<span class="normal">929</span> +<span class="normal">930</span> +<span class="normal">931</span> +<span class="normal">932</span> +<span class="normal">933</span> +<span class="normal">934</span> +<span class="normal">935</span> +<span class="normal">936</span> +<span class="normal">937</span> +<span class="normal">938</span> +<span class="normal">939</span> +<span class="normal">940</span> +<span class="normal">941</span> +<span class="normal">942</span> +<span class="normal">943</span> +<span class="normal">944</span> +<span class="normal">945</span> +<span class="normal">946</span> +<span class="normal">947</span> +<span class="normal">948</span> +<span class="normal">949</span> +<span class="normal">950</span> +<span class="normal">951</span> +<span class="normal">952</span> +<span class="normal">953</span> +<span class="normal">954</span> +<span class="normal">955</span> +<span class="normal">956</span> +<span class="normal">957</span> +<span class="normal">958</span> +<span class="normal">959</span> +<span class="normal">960</span> +<span class="normal">961</span> +<span class="normal">962</span> +<span class="normal">963</span> +<span class="normal">964</span> +<span class="normal">965</span> +<span class="normal">966</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * caja-dropbox.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Implements the Caja extension API for Dropbox.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="cp"></span> +<a id="line-26" name="line-26"></a><span class="cp">#endif</span> +<a id="line-27" name="line-27"></a> +<a id="line-28" name="line-28"></a><span class="cp">#include</span> <span class="cpf"><sys/types.h></span><span class="cp"></span> +<a id="line-29" name="line-29"></a><span class="cp">#include</span> <span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a id="line-30" name="line-30"></a><span class="cp">#include</span> <span class="cpf"><sys/un.h></span><span class="cp"></span> +<a id="line-31" name="line-31"></a><span class="cp">#include</span> <span class="cpf"><errno.h></span><span class="cp"></span> +<a id="line-32" name="line-32"></a><span class="cp">#include</span> <span class="cpf"><unistd.h></span><span class="cp"></span> +<a id="line-33" name="line-33"></a><span class="cp">#include</span> <span class="cpf"><ctype.h></span><span class="cp"></span> +<a id="line-34" name="line-34"></a> +<a id="line-35" name="line-35"></a><span class="cp">#include</span> <span class="cpf"><glib.h></span><span class="cp"></span> +<a id="line-36" name="line-36"></a><span class="cp">#include</span> <span class="cpf"><glib/gprintf.h></span><span class="cp"></span> +<a id="line-37" name="line-37"></a><span class="cp">#include</span> <span class="cpf"><glib-object.h></span><span class="cp"></span> +<a id="line-38" name="line-38"></a><span class="cp">#include</span> <span class="cpf"><gtk/gtk.h></span><span class="cp"></span> +<a id="line-39" name="line-39"></a> +<a id="line-40" name="line-40"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-extension-types.h></span><span class="cp"></span> +<a id="line-41" name="line-41"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-menu-provider.h></span><span class="cp"></span> +<a id="line-42" name="line-42"></a><span class="cp">#include</span> <span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="cp"></span> +<a id="line-43" name="line-43"></a> +<a id="line-44" name="line-44"></a><span class="cp">#include</span> <span class="cpf">"g-util.h"</span><span class="cp"></span> +<a id="line-45" name="line-45"></a><span class="cp">#include</span> <span class="cpf">"dropbox-command-client.h"</span><span class="cp"></span> +<a id="line-46" name="line-46"></a><span class="cp">#include</span> <span class="cpf">"caja-dropbox.h"</span><span class="cp"></span> +<a id="line-47" name="line-47"></a><span class="cp">#include</span> <span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a id="line-48" name="line-48"></a> +<a id="line-49" name="line-49"></a><span class="k">static</span> <span class="kt">char</span> <span class="o">*</span><span class="n">emblems</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span><span class="s">"dropbox-uptodate"</span><span class="p">,</span> <span class="s">"dropbox-syncing"</span><span class="p">,</span> <span class="s">"dropbox-unsyncable"</span><span class="p">};</span> +<a id="line-50" name="line-50"></a><span class="n">gchar</span> <span class="o">*</span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="n">EMBLEMDIR</span> <span class="p">,</span> <span class="nb">NULL</span> <span class="p">};</span> +<a id="line-51" name="line-51"></a> +<a id="line-52" name="line-52"></a><span class="n">gboolean</span> <span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span> +<a id="line-53" name="line-53"></a> +<a id="line-54" name="line-54"></a><span class="k">static</span> <span class="n">GType</span> <span class="n">dropbox_type</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a id="line-55" name="line-55"></a> +<a id="line-56" name="line-56"></a><span class="cm">/*</span> +<a id="line-57" name="line-57"></a><span class="cm"> Simplifies a path by removing navigation elements such as '.' and '..'</span> +<a id="line-58" name="line-58"></a> +<a id="line-59" name="line-59"></a><span class="cm"> Arguments:</span> +<a id="line-60" name="line-60"></a><span class="cm"> - path: input path to be canonicalized</span> +<a id="line-61" name="line-61"></a> +<a id="line-62" name="line-62"></a><span class="cm"> Returns:</span> +<a id="line-63" name="line-63"></a><span class="cm"> Canonicalized path if input path is valid.</span> +<a id="line-64" name="line-64"></a><span class="cm"> NULL otherwise.</span> +<a id="line-65" name="line-65"></a><span class="cm">*/</span> +<a id="line-66" name="line-66"></a><span class="k">static</span> <span class="n">gchar</span> <span class="o">*</span> +<a id="line-67" name="line-67"></a><span class="nf">canonicalize_path</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">path</span><span class="p">)</span> <span class="p">{</span> +<a id="line-68" name="line-68"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a id="line-69" name="line-69"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-70" name="line-70"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">cpy</span><span class="p">,</span> <span class="o">**</span><span class="n">elts</span><span class="p">;</span> +<a id="line-71" name="line-71"></a> +<a id="line-72" name="line-72"></a> <span class="n">g_assert</span><span class="p">(</span><span class="n">path</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a id="line-73" name="line-73"></a> <span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'/'</span><span class="p">);</span> +<a id="line-74" name="line-74"></a> +<a id="line-75" name="line-75"></a> <span class="n">elts</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s">"/"</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a id="line-76" name="line-76"></a> <span class="n">cpy</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="n">g_strv_length</span><span class="p">(</span><span class="n">elts</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span> +<a id="line-77" name="line-77"></a> <span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="s">"/"</span><span class="p">;</span> +<a id="line-78" name="line-78"></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">elts</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 id="line-79" name="line-79"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">".."</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-80" name="line-80"></a> <span class="k">if</span> <span class="p">(</span><span class="n">j</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-81" name="line-81"></a> <span class="n">j</span><span class="o">--</span><span class="p">;</span> +<a id="line-82" name="line-82"></a> <span class="p">}</span> +<a id="line-83" name="line-83"></a> <span class="k">else</span> <span class="p">{</span> +<a id="line-84" name="line-84"></a> <span class="c1">// Input path has too many parent directory references and is invalid</span> +<a id="line-85" name="line-85"></a> <span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-86" name="line-86"></a> <span class="k">goto</span> <span class="n">exit</span><span class="p">;</span> +<a id="line-87" name="line-87"></a> <span class="p">}</span> +<a id="line-88" name="line-88"></a> <span class="p">}</span> +<a id="line-89" name="line-89"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">"."</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">)</span> <span class="p">{</span> +<a id="line-90" name="line-90"></a> <span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span> <span class="o">=</span> <span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a id="line-91" name="line-91"></a> <span class="p">}</span> +<a id="line-92" name="line-92"></a> <span class="p">}</span> +<a id="line-93" name="line-93"></a> +<a id="line-94" name="line-94"></a> <span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-95" name="line-95"></a> <span class="n">toret</span> <span class="o">=</span> <span class="n">g_build_filenamev</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span> +<a id="line-96" name="line-96"></a> +<a id="line-97" name="line-97"></a><span class="nl">exit</span><span class="p">:</span> +<a id="line-98" name="line-98"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span> +<a id="line-99" name="line-99"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">elts</span><span class="p">);</span> +<a id="line-100" name="line-100"></a> +<a id="line-101" name="line-101"></a> <span class="k">return</span> <span class="n">toret</span><span class="p">;</span> +<a id="line-102" name="line-102"></a><span class="p">}</span> +<a id="line-103" name="line-103"></a> +<a id="line-104" name="line-104"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-105" name="line-105"></a><span class="nf">reset_file</span><span class="p">(</span><span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">)</span> <span class="p">{</span> +<a id="line-106" name="line-106"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"resetting file %p"</span><span class="p">,</span> <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)</span> <span class="n">file</span><span class="p">);</span> +<a id="line-107" name="line-107"></a> <span class="n">caja_file_info_invalidate_extension_info</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-108" name="line-108"></a><span class="p">}</span> +<a id="line-109" name="line-109"></a> +<a id="line-110" name="line-110"></a><span class="k">static</span> <span class="n">gboolean</span> +<a id="line-111" name="line-111"></a><span class="nf">reset_all_files</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a id="line-112" name="line-112"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a id="line-113" name="line-113"></a> +<a id="line-114" name="line-114"></a> <span class="cm">/* this works because you can call a function pointer with</span> +<a id="line-115" name="line-115"></a><span class="cm"> more arguments than it takes */</span> +<a id="line-116" name="line-116"></a> <span class="n">g_hash_table_foreach</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="p">(</span><span class="n">GHFunc</span><span class="p">)</span> <span class="n">reset_file</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a id="line-117" name="line-117"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a id="line-118" name="line-118"></a><span class="p">}</span> +<a id="line-119" name="line-119"></a> +<a id="line-120" name="line-120"></a> +<a id="line-121" name="line-121"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-122" name="line-122"></a><span class="nf">when_file_dies</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">,</span> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">address</span><span class="p">)</span> <span class="p">{</span> +<a id="line-123" name="line-123"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a id="line-124" name="line-124"></a> +<a id="line-125" name="line-125"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> +<a id="line-126" name="line-126"></a> +<a id="line-127" name="line-127"></a> <span class="cm">/* we never got a change to view this file */</span> +<a id="line-128" name="line-128"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-129" name="line-129"></a> <span class="k">return</span><span class="p">;</span> +<a id="line-130" name="line-130"></a> <span class="p">}</span> +<a id="line-131" name="line-131"></a> +<a id="line-132" name="line-132"></a> <span class="cm">/* too chatty */</span> +<a id="line-133" name="line-133"></a> <span class="cm">/* debug("removing %s <-> 0x%p", filename, address); */</span> +<a id="line-134" name="line-134"></a> +<a id="line-135" name="line-135"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a id="line-136" name="line-136"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> +<a id="line-137" name="line-137"></a><span class="p">}</span> +<a id="line-138" name="line-138"></a> +<a id="line-139" name="line-139"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-140" name="line-140"></a><span class="nf">changed_cb</span><span class="p">(</span><span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a id="line-141" name="line-141"></a> <span class="cm">/* check if this file's path has changed, if so update the hash and invalidate</span> +<a id="line-142" name="line-142"></a><span class="cm"> the file */</span> +<a id="line-143" name="line-143"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">,</span> <span class="o">*</span><span class="n">pfilename</span><span class="p">;</span> +<a id="line-144" name="line-144"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename2</span><span class="p">;</span> +<a id="line-145" name="line-145"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a id="line-146" name="line-146"></a> +<a id="line-147" name="line-147"></a> <span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-148" name="line-148"></a> <span class="n">pfilename</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a id="line-149" name="line-149"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">pfilename</span> <span class="o">?</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">)</span> <span class="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-150" name="line-150"></a> +<a id="line-151" name="line-151"></a> <span class="cm">/* Canonicalization will only null-out a non-null filename if it is invalid */</span> +<a id="line-152" name="line-152"></a> <span class="n">g_assert</span><span class="p">((</span><span class="n">pfilename</span> <span class="o">==</span> <span class="nb">NULL</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="o">||</span> <span class="p">(</span><span class="n">pfilename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">filename</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">));</span> +<a id="line-153" name="line-153"></a> +<a id="line-154" name="line-154"></a> <span class="n">filename2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a id="line-155" name="line-155"></a> +<a id="line-156" name="line-156"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a id="line-157" name="line-157"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a id="line-158" name="line-158"></a> +<a id="line-159" name="line-159"></a> <span class="cm">/* if filename2 is NULL we've never seen this file in update_file_info */</span> +<a id="line-160" name="line-160"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename2</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-161" name="line-161"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-162" name="line-162"></a> <span class="k">return</span><span class="p">;</span> +<a id="line-163" name="line-163"></a> <span class="p">}</span> +<a id="line-164" name="line-164"></a> +<a id="line-165" name="line-165"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-166" name="line-166"></a> <span class="cm">/* A file has moved to offline storage. Lets remove it from our tables. */</span> +<a id="line-167" name="line-167"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a id="line-168" name="line-168"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename2</span><span class="p">);</span> +<a id="line-169" name="line-169"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a id="line-170" name="line-170"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a id="line-171" name="line-171"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-172" name="line-172"></a> <span class="k">return</span><span class="p">;</span> +<a id="line-173" name="line-173"></a> <span class="p">}</span> +<a id="line-174" name="line-174"></a> +<a id="line-175" name="line-175"></a> <span class="cm">/* this is a hack, because caja doesn't do this for us, for some reason</span> +<a id="line-176" name="line-176"></a><span class="cm"> the file's path has changed */</span> +<a id="line-177" name="line-177"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">filename2</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-178" name="line-178"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"shifty old: %s, new %s"</span><span class="p">,</span> <span class="n">filename2</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a id="line-179" name="line-179"></a> +<a id="line-180" name="line-180"></a> <span class="cm">/* gotta do this first, the call after this frees filename2 */</span> +<a id="line-181" name="line-181"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename2</span><span class="p">);</span> +<a id="line-182" name="line-182"></a> +<a id="line-183" name="line-183"></a> <span class="n">g_hash_table_replace</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span> +<a id="line-184" name="line-184"></a> +<a id="line-185" name="line-185"></a> <span class="p">{</span> +<a id="line-186" name="line-186"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">f2</span><span class="p">;</span> +<a id="line-187" name="line-187"></a> <span class="cm">/* we shouldn't have another mapping from filename to an object */</span> +<a id="line-188" name="line-188"></a> <span class="n">f2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a id="line-189" name="line-189"></a> <span class="k">if</span> <span class="p">(</span><span class="n">f2</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-190" name="line-190"></a> <span class="cm">/* lets fix it if it's true, just remove the mapping */</span> +<a id="line-191" name="line-191"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a id="line-192" name="line-192"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">f2</span><span class="p">);</span> +<a id="line-193" name="line-193"></a> <span class="p">}</span> +<a id="line-194" name="line-194"></a> <span class="p">}</span> +<a id="line-195" name="line-195"></a> +<a id="line-196" name="line-196"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="n">file</span><span class="p">);</span> +<a id="line-197" name="line-197"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-198" name="line-198"></a> <span class="p">}</span> +<a id="line-199" name="line-199"></a> +<a id="line-200" name="line-200"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-201" name="line-201"></a><span class="p">}</span> +<a id="line-202" name="line-202"></a> +<a id="line-203" name="line-203"></a><span class="k">static</span> <span class="n">CajaOperationResult</span> +<a id="line-204" name="line-204"></a><span class="nf">caja_dropbox_update_file_info</span><span class="p">(</span><span class="n">CajaInfoProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a id="line-205" name="line-205"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> +<a id="line-206" name="line-206"></a> <span class="n">GClosure</span> <span class="o">*</span><span class="n">update_complete</span><span class="p">,</span> +<a id="line-207" name="line-207"></a> <span class="n">CajaOperationHandle</span> <span class="o">**</span><span class="n">handle</span><span class="p">)</span> <span class="p">{</span> +<a id="line-208" name="line-208"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">;</span> +<a id="line-209" name="line-209"></a> +<a id="line-210" name="line-210"></a> <span class="n">cvs</span> <span class="o">=</span> <span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span> +<a id="line-211" name="line-211"></a> +<a id="line-212" name="line-212"></a> <span class="cm">/* this code adds this file object to our two-way hash of file objects</span> +<a id="line-213" name="line-213"></a><span class="cm"> so we can shell touch these files later */</span> +<a id="line-214" name="line-214"></a> <span class="p">{</span> +<a id="line-215" name="line-215"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">pfilename</span><span class="p">,</span> <span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a id="line-216" name="line-216"></a> +<a id="line-217" name="line-217"></a> <span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-218" name="line-218"></a> <span class="n">pfilename</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a id="line-219" name="line-219"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a id="line-220" name="line-220"></a> <span class="k">if</span> <span class="p">(</span><span class="n">pfilename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-221" name="line-221"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a id="line-222" name="line-222"></a> <span class="p">}</span> +<a id="line-223" name="line-223"></a> <span class="k">else</span> <span class="p">{</span> +<a id="line-224" name="line-224"></a> <span class="kt">int</span> <span class="n">cmp</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a id="line-225" name="line-225"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">stored_filename</span><span class="p">;</span> +<a id="line-226" name="line-226"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a id="line-227" name="line-227"></a> +<a id="line-228" name="line-228"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a id="line-229" name="line-229"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a id="line-230" name="line-230"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-231" name="line-231"></a> <span class="cm">/* pfilename path was invalid if canonicalize operation nulled it out */</span> +<a id="line-232" name="line-232"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span> +<a id="line-233" name="line-233"></a> <span class="p">}</span> +<a id="line-234" name="line-234"></a> <span class="n">stored_filename</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a id="line-235" name="line-235"></a> +<a id="line-236" name="line-236"></a> <span class="cm">/* don't worry about the dup checks, gcc is smart enough to optimize this</span> +<a id="line-237" name="line-237"></a><span class="cm"> GCSE ftw */</span> +<a id="line-238" name="line-238"></a> <span class="k">if</span> <span class="p">((</span><span class="n">stored_filename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="p">(</span><span class="n">cmp</span> <span class="o">=</span> <span class="n">strcmp</span><span class="p">(</span><span class="n">stored_filename</span><span class="p">,</span> <span class="n">filename</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">||</span> +<a id="line-239" name="line-239"></a> <span class="n">stored_filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-240" name="line-240"></a> +<a id="line-241" name="line-241"></a> <span class="k">if</span> <span class="p">(</span><span class="n">stored_filename</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">cmp</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-242" name="line-242"></a> <span class="cm">/* this happens when the filename changes name on a file obj</span> +<a id="line-243" name="line-243"></a><span class="cm"> but changed_cb isn't called */</span> +<a id="line-244" name="line-244"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a id="line-245" name="line-245"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">);</span> +<a id="line-246" name="line-246"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">stored_filename</span><span class="p">);</span> +<a id="line-247" name="line-247"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a id="line-248" name="line-248"></a> <span class="p">}</span> +<a id="line-249" name="line-249"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">stored_filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-250" name="line-250"></a> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">f2</span><span class="p">;</span> +<a id="line-251" name="line-251"></a> +<a id="line-252" name="line-252"></a> <span class="k">if</span> <span class="p">((</span><span class="n">f2</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-253" name="line-253"></a> <span class="cm">/* if the filename exists in the filename2obj hash</span> +<a id="line-254" name="line-254"></a><span class="cm"> but the file obj doesn't exist in the obj2filename hash:</span> +<a id="line-255" name="line-255"></a> +<a id="line-256" name="line-256"></a><span class="cm"> this happens when caja allocates another file object</span> +<a id="line-257" name="line-257"></a><span class="cm"> for a filename without first deleting the original file object</span> +<a id="line-258" name="line-258"></a> +<a id="line-259" name="line-259"></a><span class="cm"> just remove the association to the older file object, it's obsolete</span> +<a id="line-260" name="line-260"></a><span class="cm"> */</span> +<a id="line-261" name="line-261"></a> <span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">f2</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a id="line-262" name="line-262"></a> <span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">f2</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a id="line-263" name="line-263"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a id="line-264" name="line-264"></a> <span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">f2</span><span class="p">);</span> +<a id="line-265" name="line-265"></a> <span class="p">}</span> +<a id="line-266" name="line-266"></a> <span class="p">}</span> +<a id="line-267" name="line-267"></a> +<a id="line-268" name="line-268"></a> <span class="cm">/* too chatty */</span> +<a id="line-269" name="line-269"></a> <span class="cm">/* debug("adding %s <-> 0x%p", filename, file);*/</span> +<a id="line-270" name="line-270"></a> <span class="n">g_object_weak_ref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span> <span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span> <span class="n">when_file_dies</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a id="line-271" name="line-271"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span> <span class="n">file</span><span class="p">);</span> +<a id="line-272" name="line-272"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span> +<a id="line-273" name="line-273"></a> <span class="n">g_signal_connect</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="s">"changed"</span><span class="p">,</span> <span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span> <span class="n">cvs</span><span class="p">);</span> +<a id="line-274" name="line-274"></a> <span class="p">}</span> +<a id="line-275" name="line-275"></a> +<a id="line-276" name="line-276"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-277" name="line-277"></a> <span class="p">}</span> +<a id="line-278" name="line-278"></a> <span class="p">}</span> +<a id="line-279" name="line-279"></a> +<a id="line-280" name="line-280"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">))</span> <span class="o">==</span> <span class="n">FALSE</span> <span class="o">||</span> +<a id="line-281" name="line-281"></a> <span class="n">caja_file_info_is_gone</span><span class="p">(</span><span class="n">file</span><span class="p">))</span> <span class="p">{</span> +<a id="line-282" name="line-282"></a> <span class="k">return</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a id="line-283" name="line-283"></a> <span class="p">}</span> +<a id="line-284" name="line-284"></a> +<a id="line-285" name="line-285"></a> <span class="p">{</span> +<a id="line-286" name="line-286"></a> <span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="n">dfic</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a id="line-287" name="line-287"></a> +<a id="line-288" name="line-288"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a id="line-289" name="line-289"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">provider</span> <span class="o">=</span> <span class="n">provider</span><span class="p">;</span> +<a id="line-290" name="line-290"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GET_FILE_INFO</span><span class="p">;</span> +<a id="line-291" name="line-291"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span> <span class="o">=</span> <span class="n">g_closure_ref</span><span class="p">(</span><span class="n">update_complete</span><span class="p">);</span> +<a id="line-292" name="line-292"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">file</span> <span class="o">=</span> <span class="n">g_object_ref</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-293" name="line-293"></a> +<a id="line-294" name="line-294"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dfic</span><span class="p">);</span> +<a id="line-295" name="line-295"></a> +<a id="line-296" name="line-296"></a> <span class="o">*</span><span class="n">handle</span> <span class="o">=</span> <span class="p">(</span><span class="n">CajaOperationHandle</span> <span class="o">*</span><span class="p">)</span> <span class="n">dfic</span><span class="p">;</span> +<a id="line-297" name="line-297"></a> +<a id="line-298" name="line-298"></a> <span class="k">return</span> <span class="n">dropbox_use_operation_in_progress_workaround</span> +<a id="line-299" name="line-299"></a> <span class="o">?</span> <span class="nl">CAJA_OPERATION_COMPLETE</span> +<a id="line-300" name="line-300"></a> <span class="p">:</span> <span class="n">CAJA_OPERATION_IN_PROGRESS</span><span class="p">;</span> +<a id="line-301" name="line-301"></a> <span class="p">}</span> +<a id="line-302" name="line-302"></a><span class="p">}</span> +<a id="line-303" name="line-303"></a> +<a id="line-304" name="line-304"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-305" name="line-305"></a><span class="nf">handle_shell_touch</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a id="line-306" name="line-306"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">path</span><span class="p">;</span> +<a id="line-307" name="line-307"></a> +<a id="line-308" name="line-308"></a> <span class="c1">// debug_enter();</span> +<a id="line-309" name="line-309"></a> +<a id="line-310" name="line-310"></a> <span class="k">if</span> <span class="p">((</span><span class="n">path</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="s">"path"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a id="line-311" name="line-311"></a> <span class="n">path</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="o">==</span> <span class="sc">'/'</span><span class="p">)</span> <span class="p">{</span> +<a id="line-312" name="line-312"></a><span class="hll"> <span class="n">CajaFileInfo</span> <span class="o">*</span><span class="n">file</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'file' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-313" name="line-313"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a id="line-314" name="line-314"></a> +<a id="line-315" name="line-315"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">canonicalize_path</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> +<a id="line-316" name="line-316"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-317" name="line-317"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"shell touch for %s"</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a id="line-318" name="line-318"></a> +<a id="line-319" name="line-319"></a> <span class="n">file</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a id="line-320" name="line-320"></a> +<a id="line-321" name="line-321"></a> <span class="k">if</span> <span class="p">(</span><span class="n">file</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-322" name="line-322"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"gonna reset %s"</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span> +<a id="line-323" name="line-323"></a> <span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-324" name="line-324"></a> <span class="p">}</span> +<a id="line-325" name="line-325"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-326" name="line-326"></a> <span class="p">}</span> +<a id="line-327" name="line-327"></a> <span class="p">}</span> +<a id="line-328" name="line-328"></a> +<a id="line-329" name="line-329"></a> <span class="k">return</span><span class="p">;</span> +<a id="line-330" name="line-330"></a><span class="p">}</span> +<a id="line-331" name="line-331"></a> +<a id="line-332" name="line-332"></a><span class="n">gboolean</span> +<a id="line-333" name="line-333"></a><span class="nf">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span> <span class="o">*</span><span class="n">dficr</span><span class="p">)</span> <span class="p">{</span> +<a id="line-334" name="line-334"></a> +<a id="line-335" name="line-335"></a> <span class="c1">//debug_enter();</span> +<a id="line-336" name="line-336"></a> <span class="n">CajaOperationResult</span> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span> +<a id="line-337" name="line-337"></a> +<a id="line-338" name="line-338"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="p">)</span> <span class="p">{</span> +<a id="line-339" name="line-339"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">status</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-340" name="line-340"></a> <span class="n">gboolean</span> <span class="n">isdir</span><span class="p">;</span> +<a id="line-341" name="line-341"></a> +<a id="line-342" name="line-342"></a> <span class="n">isdir</span> <span class="o">=</span> <span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">)</span> <span class="p">;</span> +<a id="line-343" name="line-343"></a> +<a id="line-344" name="line-344"></a> <span class="cm">/* if we have emblems just use them. */</span> +<a id="line-345" name="line-345"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a id="line-346" name="line-346"></a> <span class="p">(</span><span class="n">status</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">,</span> <span class="s">"emblems"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-347" name="line-347"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a id="line-348" name="line-348"></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">status</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 id="line-349" name="line-349"></a> <span class="k">if</span> <span class="p">(</span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> +<a id="line-350" name="line-350"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a id="line-351" name="line-351"></a> <span class="p">}</span> +<a id="line-352" name="line-352"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a id="line-353" name="line-353"></a> <span class="p">}</span> +<a id="line-354" name="line-354"></a> <span class="cm">/* if the file status command went okay */</span> +<a id="line-355" name="line-355"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> +<a id="line-356" name="line-356"></a> <span class="p">(</span><span class="n">status</span> <span class="o">=</span> +<a id="line-357" name="line-357"></a> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">,</span> <span class="s">"status"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&&</span> +<a id="line-358" name="line-358"></a> <span class="p">((</span><span class="n">isdir</span> <span class="o">==</span> <span class="n">TRUE</span> <span class="o">&&</span> +<a id="line-359" name="line-359"></a> <span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">||</span> <span class="n">isdir</span> <span class="o">==</span> <span class="n">FALSE</span><span class="p">))</span> <span class="p">{</span> +<a id="line-360" name="line-360"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">tag</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-361" name="line-361"></a> +<a id="line-362" name="line-362"></a> <span class="cm">/* set the tag emblem */</span> +<a id="line-363" name="line-363"></a> <span class="k">if</span> <span class="p">(</span><span class="n">isdir</span> <span class="o">&&</span> +<a id="line-364" name="line-364"></a> <span class="p">(</span><span class="n">tag</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">,</span> <span class="s">"tag"</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-365" name="line-365"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-366" name="line-366"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"web"</span><span class="p">);</span> +<a id="line-367" name="line-367"></a> <span class="p">}</span> +<a id="line-368" name="line-368"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"shared"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-369" name="line-369"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"people"</span><span class="p">);</span> +<a id="line-370" name="line-370"></a> <span class="p">}</span> +<a id="line-371" name="line-371"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"photos"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-372" name="line-372"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"photos"</span><span class="p">);</span> +<a id="line-373" name="line-373"></a> <span class="p">}</span> +<a id="line-374" name="line-374"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"sandbox"</span><span class="p">,</span> <span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-375" name="line-375"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="s">"star"</span><span class="p">);</span> +<a id="line-376" name="line-376"></a> <span class="p">}</span> +<a id="line-377" name="line-377"></a> <span class="p">}</span> +<a id="line-378" name="line-378"></a> +<a id="line-379" name="line-379"></a> <span class="cm">/* set the status emblem */</span> +<a id="line-380" name="line-380"></a> <span class="p">{</span> +<a id="line-381" name="line-381"></a> <span class="kt">int</span> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a id="line-382" name="line-382"></a> +<a id="line-383" name="line-383"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"up to date"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-384" name="line-384"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> +<a id="line-385" name="line-385"></a> <span class="p">}</span> +<a id="line-386" name="line-386"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"syncing"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-387" name="line-387"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span> +<a id="line-388" name="line-388"></a> <span class="p">}</span> +<a id="line-389" name="line-389"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"unsyncable"</span><span class="p">,</span> <span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-390" name="line-390"></a> <span class="n">emblem_code</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span> +<a id="line-391" name="line-391"></a> <span class="p">}</span> +<a id="line-392" name="line-392"></a> +<a id="line-393" name="line-393"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_code</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a id="line-394" name="line-394"></a> <span class="cm">/*</span> +<a id="line-395" name="line-395"></a><span class="cm"> debug("%s to %s", emblems[emblem_code-1],</span> +<a id="line-396" name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr->dfic->file),</span> +<a id="line-397" name="line-397"></a><span class="cm"> NULL, NULL));</span> +<a id="line-398" name="line-398"></a><span class="cm"> */</span> +<a id="line-399" name="line-399"></a> <span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span> <span class="n">emblems</span><span class="p">[</span><span class="n">emblem_code</span><span class="mi">-1</span><span class="p">]);</span> +<a id="line-400" name="line-400"></a> <span class="p">}</span> +<a id="line-401" name="line-401"></a> <span class="p">}</span> +<a id="line-402" name="line-402"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a id="line-403" name="line-403"></a> <span class="p">}</span> +<a id="line-404" name="line-404"></a> <span class="p">}</span> +<a id="line-405" name="line-405"></a> +<a id="line-406" name="line-406"></a> <span class="cm">/* complete the info request */</span> +<a id="line-407" name="line-407"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">)</span> <span class="p">{</span> +<a id="line-408" name="line-408"></a> <span class="n">caja_info_provider_update_complete_invoke</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">,</span> +<a id="line-409" name="line-409"></a> <span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="p">,</span> +<a id="line-410" name="line-410"></a> <span class="p">(</span><span class="n">CajaOperationHandle</span><span class="o">*</span><span class="p">)</span> <span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">,</span> +<a id="line-411" name="line-411"></a> <span class="n">result</span><span class="p">);</span> +<a id="line-412" name="line-412"></a> <span class="p">}</span> +<a id="line-413" name="line-413"></a> +<a id="line-414" name="line-414"></a> <span class="cm">/* destroy the objects we created */</span> +<a id="line-415" name="line-415"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a id="line-416" name="line-416"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">);</span> +<a id="line-417" name="line-417"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a id="line-418" name="line-418"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">);</span> +<a id="line-419" name="line-419"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a id="line-420" name="line-420"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">);</span> +<a id="line-421" name="line-421"></a> +<a id="line-422" name="line-422"></a> <span class="cm">/* unref the objects we didn't create */</span> +<a id="line-423" name="line-423"></a> <span class="n">g_closure_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">);</span> +<a id="line-424" name="line-424"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span> +<a id="line-425" name="line-425"></a> +<a id="line-426" name="line-426"></a> <span class="cm">/* now free the structs */</span> +<a id="line-427" name="line-427"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">);</span> +<a id="line-428" name="line-428"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="p">);</span> +<a id="line-429" name="line-429"></a> +<a id="line-430" name="line-430"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a id="line-431" name="line-431"></a><span class="p">}</span> +<a id="line-432" name="line-432"></a> +<a id="line-433" name="line-433"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-434" name="line-434"></a><span class="nf">caja_dropbox_cancel_update</span><span class="p">(</span><span class="n">CajaInfoProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a id="line-435" name="line-435"></a> <span class="n">CajaOperationHandle</span> <span class="o">*</span><span class="n">handle</span><span class="p">)</span> <span class="p">{</span> +<a id="line-436" name="line-436"></a> <span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="n">dfic</span> <span class="o">=</span> <span class="p">(</span><span class="n">DropboxFileInfoCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">handle</span><span class="p">;</span> +<a id="line-437" name="line-437"></a> <span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a id="line-438" name="line-438"></a> <span class="k">return</span><span class="p">;</span> +<a id="line-439" name="line-439"></a><span class="p">}</span> +<a id="line-440" name="line-440"></a> +<a id="line-441" name="line-441"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-442" name="line-442"></a><span class="nf">menu_item_cb</span><span class="p">(</span><span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">,</span> +<a id="line-443" name="line-443"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a id="line-444" name="line-444"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">verb</span><span class="p">;</span> +<a id="line-445" name="line-445"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">;</span> +<a id="line-446" name="line-446"></a> <span class="n">DropboxGeneralCommand</span> <span class="o">*</span><span class="n">dcac</span><span class="p">;</span> +<a id="line-447" name="line-447"></a> +<a id="line-448" name="line-448"></a> <span class="n">dcac</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a id="line-449" name="line-449"></a> +<a id="line-450" name="line-450"></a> <span class="cm">/* maybe these would be better passed in a container</span> +<a id="line-451" name="line-451"></a><span class="cm"> struct used as the userdata pointer, oh well this</span> +<a id="line-452" name="line-452"></a><span class="cm"> is how dave camp does it */</span> +<a id="line-453" name="line-453"></a> <span class="n">files</span> <span class="o">=</span> <span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_files"</span><span class="p">);</span> +<a id="line-454" name="line-454"></a> <span class="n">verb</span> <span class="o">=</span> <span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_verb"</span><span class="p">);</span> +<a id="line-455" name="line-455"></a> +<a id="line-456" name="line-456"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a id="line-457" name="line-457"></a> +<a id="line-458" name="line-458"></a> <span class="cm">/* build the argument list */</span> +<a id="line-459" name="line-459"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-460" name="line-460"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-461" name="line-461"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a id="line-462" name="line-462"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_strfreev</span><span class="p">);</span> +<a id="line-463" name="line-463"></a> <span class="p">{</span> +<a id="line-464" name="line-464"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">arglist</span><span class="p">;</span> +<a id="line-465" name="line-465"></a> <span class="n">guint</span> <span class="n">i</span><span class="p">;</span> +<a id="line-466" name="line-466"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">li</span><span class="p">;</span> +<a id="line-467" name="line-467"></a> +<a id="line-468" name="line-468"></a> <span class="n">arglist</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span> +<a id="line-469" name="line-469"></a> +<a id="line-470" name="line-470"></a> <span class="k">for</span> <span class="p">(</span><span class="n">li</span> <span class="o">=</span> <span class="n">files</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">li</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">li</span> <span class="o">=</span> <span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span> <span class="p">{</span> +<a id="line-471" name="line-471"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">CAJA_FILE_INFO</span><span class="p">(</span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">));</span> +<a id="line-472" name="line-472"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">path</span> <span class="o">=</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a id="line-473" name="line-473"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a id="line-474" name="line-474"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">path</span><span class="p">)</span> +<a id="line-475" name="line-475"></a> <span class="k">continue</span><span class="p">;</span> +<a id="line-476" name="line-476"></a> <span class="n">arglist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">path</span><span class="p">;</span> +<a id="line-477" name="line-477"></a> <span class="n">i</span><span class="o">++</span><span class="p">;</span> +<a id="line-478" name="line-478"></a> <span class="p">}</span> +<a id="line-479" name="line-479"></a> +<a id="line-480" name="line-480"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> +<a id="line-481" name="line-481"></a> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span> +<a id="line-482" name="line-482"></a> <span class="n">arglist</span><span class="p">);</span> +<a id="line-483" name="line-483"></a> <span class="p">}</span> +<a id="line-484" name="line-484"></a> +<a id="line-485" name="line-485"></a> <span class="p">{</span> +<a id="line-486" name="line-486"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">arglist</span><span class="p">;</span> +<a id="line-487" name="line-487"></a> <span class="n">arglist</span> <span class="o">=</span> <span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> +<a id="line-488" name="line-488"></a> <span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">);</span> +<a id="line-489" name="line-489"></a> <span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-490" name="line-490"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"verb"</span><span class="p">),</span> <span class="n">arglist</span><span class="p">);</span> +<a id="line-491" name="line-491"></a> <span class="p">}</span> +<a id="line-492" name="line-492"></a> +<a id="line-493" name="line-493"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_action"</span><span class="p">);</span> +<a id="line-494" name="line-494"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">handler</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-495" name="line-495"></a> <span class="n">dcac</span><span class="o">-></span><span class="n">handler_ud</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-496" name="line-496"></a> +<a id="line-497" name="line-497"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dcac</span><span class="p">);</span> +<a id="line-498" name="line-498"></a><span class="p">}</span> +<a id="line-499" name="line-499"></a> +<a id="line-500" name="line-500"></a><span class="k">static</span> <span class="kt">char</span> <span class="nf">from_hex</span><span class="p">(</span><span class="n">gchar</span> <span class="n">ch</span><span class="p">)</span> <span class="p">{</span> +<a id="line-501" name="line-501"></a> <span class="k">return</span> <span class="n">isdigit</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="o">?</span> <span class="n">ch</span> <span class="o">-</span> <span class="sc">'0'</span> <span class="o">:</span> <span class="n">tolower</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span> <span class="o">-</span> <span class="sc">'a'</span> <span class="o">+</span> <span class="mi">10</span><span class="p">;</span> +<a id="line-502" name="line-502"></a><span class="p">}</span> +<a id="line-503" name="line-503"></a> +<a id="line-504" name="line-504"></a><span class="c1">// decode in --> out, but dont fill more than n chars into out</span> +<a id="line-505" name="line-505"></a><span class="c1">// returns len of out if thing went well, -1 if n wasn't big enough</span> +<a id="line-506" name="line-506"></a><span class="c1">// can be used in place (whoa!)</span> +<a id="line-507" name="line-507"></a><span class="kt">int</span> <span class="nf">GhettoURLDecode</span><span class="p">(</span><span class="n">gchar</span><span class="o">*</span> <span class="n">out</span><span class="p">,</span> <span class="n">gchar</span><span class="o">*</span> <span class="n">in</span><span class="p">,</span> <span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> +<a id="line-508" name="line-508"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">out_initial</span><span class="p">;</span> +<a id="line-509" name="line-509"></a> +<a id="line-510" name="line-510"></a> <span class="k">for</span><span class="p">(</span><span class="n">out_initial</span> <span class="o">=</span> <span class="n">out</span><span class="p">;</span> <span class="n">out</span><span class="o">-</span><span class="n">out_initial</span> <span class="o"><</span> <span class="n">n</span> <span class="o">&&</span> <span class="o">*</span><span class="n">in</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">;</span> <span class="n">out</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a id="line-511" name="line-511"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">in</span> <span class="o">==</span> <span class="sc">'%'</span><span class="p">)</span> <span class="p">{</span> +<a id="line-512" name="line-512"></a> <span class="k">if</span> <span class="p">((</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'\0'</span><span class="p">))</span> <span class="p">{</span> +<a id="line-513" name="line-513"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o"><<</span> <span class="mi">4</span> <span class="o">|</span> <span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span> +<a id="line-514" name="line-514"></a> <span class="n">in</span> <span class="o">+=</span> <span class="mi">3</span><span class="p">;</span> +<a id="line-515" name="line-515"></a> <span class="p">}</span> +<a id="line-516" name="line-516"></a> <span class="k">else</span> <span class="p">{</span> +<a id="line-517" name="line-517"></a> <span class="c1">// Input string isn't well-formed</span> +<a id="line-518" name="line-518"></a> <span class="k">return</span> <span class="mi">-1</span><span class="p">;</span> +<a id="line-519" name="line-519"></a> <span class="p">}</span> +<a id="line-520" name="line-520"></a> <span class="p">}</span> +<a id="line-521" name="line-521"></a> <span class="k">else</span> <span class="p">{</span> +<a id="line-522" name="line-522"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="o">*</span><span class="n">in</span><span class="p">;</span> +<a id="line-523" name="line-523"></a> <span class="n">in</span><span class="o">++</span><span class="p">;</span> +<a id="line-524" name="line-524"></a> <span class="p">}</span> +<a id="line-525" name="line-525"></a> <span class="p">}</span> +<a id="line-526" name="line-526"></a> +<a id="line-527" name="line-527"></a> <span class="k">if</span> <span class="p">(</span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span> <span class="o"><</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> +<a id="line-528" name="line-528"></a> <span class="o">*</span><span class="n">out</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> +<a id="line-529" name="line-529"></a> <span class="k">return</span> <span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="p">;</span> +<a id="line-530" name="line-530"></a> <span class="p">}</span> +<a id="line-531" name="line-531"></a> <span class="k">return</span> <span class="mi">-1</span><span class="p">;</span> +<a id="line-532" name="line-532"></a><span class="p">}</span> +<a id="line-533" name="line-533"></a> +<a id="line-534" name="line-534"></a><span class="k">static</span> <span class="kt">int</span> +<a id="line-535" name="line-535"></a><span class="nf">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">gchar</span> <span class="o">**</span><span class="n">options</span><span class="p">,</span> +<a id="line-536" name="line-536"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">menu</span><span class="p">,</span> +<a id="line-537" name="line-537"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">old_action_string</span><span class="p">,</span> +<a id="line-538" name="line-538"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">toret</span><span class="p">,</span> +<a id="line-539" name="line-539"></a> <span class="n">CajaMenuProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a id="line-540" name="line-540"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">)</span> +<a id="line-541" name="line-541"></a><span class="p">{</span> +<a id="line-542" name="line-542"></a> <span class="kt">int</span> <span class="n">ret</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a id="line-543" name="line-543"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a id="line-544" name="line-544"></a> +<a id="line-545" name="line-545"></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">options</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 id="line-546" name="line-546"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">option_info</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="s">"~"</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span> +<a id="line-547" name="line-547"></a> <span class="cm">/* if this is a valid string */</span> +<a id="line-548" name="line-548"></a> <span class="k">if</span> <span class="p">(</span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> +<a id="line-549" name="line-549"></a> <span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-550" name="line-550"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span> +<a id="line-551" name="line-551"></a> <span class="k">continue</span><span class="p">;</span> +<a id="line-552" name="line-552"></a> <span class="p">}</span> +<a id="line-553" name="line-553"></a> +<a id="line-554" name="line-554"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">item_name</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> +<a id="line-555" name="line-555"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">item_inner</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> +<a id="line-556" name="line-556"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">verb</span> <span class="o">=</span> <span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> +<a id="line-557" name="line-557"></a> +<a id="line-558" name="line-558"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_name</span><span class="p">,</span> <span class="n">item_name</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">item_name</span><span class="p">));</span> +<a id="line-559" name="line-559"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">verb</span><span class="p">));</span> +<a id="line-560" name="line-560"></a> <span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="n">item_inner</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">item_inner</span><span class="p">));</span> +<a id="line-561" name="line-561"></a> +<a id="line-562" name="line-562"></a> <span class="c1">// If the inner section has a menu in it then we create a submenu. The verb will be ignored.</span> +<a id="line-563" name="line-563"></a> <span class="c1">// Otherwise add the verb to our map and add the menu item to the list.</span> +<a id="line-564" name="line-564"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="sc">'~'</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-565" name="line-565"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">new_action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span> +<a id="line-566" name="line-566"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">suboptions</span> <span class="o">=</span> <span class="n">g_strsplit</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span> <span class="s">"|"</span><span class="p">,</span> <span class="mi">-1</span><span class="p">);</span> +<a id="line-567" name="line-567"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">;</span> +<a id="line-568" name="line-568"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">submenu</span> <span class="o">=</span> <span class="n">caja_menu_new</span><span class="p">();</span> +<a id="line-569" name="line-569"></a> +<a id="line-570" name="line-570"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">item_name</span><span class="p">);</span> +<a id="line-571" name="line-571"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="s">"::"</span><span class="p">);</span> +<a id="line-572" name="line-572"></a> +<a id="line-573" name="line-573"></a> <span class="n">ret</span> <span class="o">+=</span> <span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">suboptions</span><span class="p">,</span> <span class="n">submenu</span><span class="p">,</span> <span class="n">new_action_string</span><span class="p">,</span> +<a id="line-574" name="line-574"></a> <span class="n">toret</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">files</span><span class="p">);</span> +<a id="line-575" name="line-575"></a> +<a id="line-576" name="line-576"></a> <span class="n">item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span> +<a id="line-577" name="line-577"></a> <span class="n">item_name</span><span class="p">,</span> <span class="s">""</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a id="line-578" name="line-578"></a> <span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">submenu</span><span class="p">);</span> +<a id="line-579" name="line-579"></a> <span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span> <span class="n">item</span><span class="p">);</span> +<a id="line-580" name="line-580"></a> +<a id="line-581" name="line-581"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">suboptions</span><span class="p">);</span> +<a id="line-582" name="line-582"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> +<a id="line-583" name="line-583"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">submenu</span><span class="p">);</span> +<a id="line-584" name="line-584"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a id="line-585" name="line-585"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a id="line-586" name="line-586"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">item</span><span class="p">;</span> +<a id="line-587" name="line-587"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">new_action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span> +<a id="line-588" name="line-588"></a> <span class="n">gboolean</span> <span class="n">grayed_out</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a id="line-589" name="line-589"></a> +<a id="line-590" name="line-590"></a> <span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">verb</span><span class="p">);</span> +<a id="line-591" name="line-591"></a> +<a id="line-592" name="line-592"></a> <span class="k">if</span> <span class="p">(</span><span class="n">item_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'!'</span><span class="p">)</span> <span class="p">{</span> +<a id="line-593" name="line-593"></a> <span class="n">item_name</span><span class="o">++</span><span class="p">;</span> +<a id="line-594" name="line-594"></a> <span class="n">grayed_out</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a id="line-595" name="line-595"></a> <span class="p">}</span> +<a id="line-596" name="line-596"></a> +<a id="line-597" name="line-597"></a> <span class="n">item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span> <span class="n">item_name</span><span class="p">,</span> <span class="n">item_inner</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a id="line-598" name="line-598"></a> +<a id="line-599" name="line-599"></a> <span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span> <span class="n">item</span><span class="p">);</span> +<a id="line-600" name="line-600"></a> <span class="cm">/* add the file metadata to this item */</span> +<a id="line-601" name="line-601"></a> <span class="n">g_object_set_data_full</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_files"</span><span class="p">,</span> +<a id="line-602" name="line-602"></a> <span class="n">caja_file_info_list_copy</span> <span class="p">(</span><span class="n">files</span><span class="p">),</span> +<a id="line-603" name="line-603"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">caja_file_info_list_free</span><span class="p">);</span> +<a id="line-604" name="line-604"></a> <span class="cm">/* add the verb metadata */</span> +<a id="line-605" name="line-605"></a> <span class="n">g_object_set_data_full</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"caja_dropbox_verb"</span><span class="p">,</span> +<a id="line-606" name="line-606"></a> <span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">),</span> +<a id="line-607" name="line-607"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">);</span> +<a id="line-608" name="line-608"></a> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s">"activate"</span><span class="p">,</span> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">menu_item_cb</span><span class="p">),</span> <span class="n">provider</span><span class="p">);</span> +<a id="line-609" name="line-609"></a> +<a id="line-610" name="line-610"></a> <span class="k">if</span> <span class="p">(</span><span class="n">grayed_out</span><span class="p">)</span> <span class="p">{</span> +<a id="line-611" name="line-611"></a> <span class="n">GValue</span> <span class="n">sensitive</span> <span class="o">=</span> <span class="p">{</span> <span class="mi">0</span> <span class="p">};</span> +<a id="line-612" name="line-612"></a> <span class="n">g_value_init</span> <span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span> <span class="n">G_TYPE_BOOLEAN</span><span class="p">);</span> +<a id="line-613" name="line-613"></a> <span class="n">g_value_set_boolean</span> <span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a id="line-614" name="line-614"></a> <span class="n">g_object_set_property</span> <span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span> <span class="s">"sensitive"</span><span class="p">,</span> <span class="o">&</span><span class="n">sensitive</span><span class="p">);</span> +<a id="line-615" name="line-615"></a> <span class="p">}</span> +<a id="line-616" name="line-616"></a> +<a id="line-617" name="line-617"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> +<a id="line-618" name="line-618"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a id="line-619" name="line-619"></a> <span class="n">ret</span><span class="o">++</span><span class="p">;</span> +<a id="line-620" name="line-620"></a> <span class="p">}</span> +<a id="line-621" name="line-621"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span> +<a id="line-622" name="line-622"></a> <span class="p">}</span> +<a id="line-623" name="line-623"></a> <span class="k">return</span> <span class="n">ret</span><span class="p">;</span> +<a id="line-624" name="line-624"></a><span class="p">}</span> +<a id="line-625" name="line-625"></a> +<a id="line-626" name="line-626"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-627" name="line-627"></a><span class="nf">get_file_items_callback</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">response</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">ud</span><span class="p">)</span> +<a id="line-628" name="line-628"></a><span class="p">{</span> +<a id="line-629" name="line-629"></a> <span class="n">GAsyncQueue</span> <span class="o">*</span><span class="n">reply_queue</span> <span class="o">=</span> <span class="n">ud</span><span class="p">;</span> +<a id="line-630" name="line-630"></a> +<a id="line-631" name="line-631"></a> <span class="cm">/* queue_push doesn't accept NULL as a value so we create an empty hash table</span> +<a id="line-632" name="line-632"></a><span class="cm"> * if we got no response. */</span> +<a id="line-633" name="line-633"></a> <span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span> <span class="n">response</span> <span class="o">?</span> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">response</span><span class="p">)</span> <span class="o">:</span> +<a id="line-634" name="line-634"></a> <span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">));</span> +<a id="line-635" name="line-635"></a> <span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a id="line-636" name="line-636"></a><span class="p">}</span> +<a id="line-637" name="line-637"></a> +<a id="line-638" name="line-638"></a> +<a id="line-639" name="line-639"></a><span class="k">static</span> <span class="n">GList</span> <span class="o">*</span> +<a id="line-640" name="line-640"></a><span class="nf">caja_dropbox_get_file_items</span><span class="p">(</span><span class="n">CajaMenuProvider</span> <span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a id="line-641" name="line-641"></a> <span class="n">GtkWidget</span> <span class="o">*</span><span class="n">window</span><span class="p">,</span> +<a id="line-642" name="line-642"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">files</span><span class="p">)</span> +<a id="line-643" name="line-643"></a><span class="p">{</span> +<a id="line-644" name="line-644"></a> <span class="cm">/*</span> +<a id="line-645" name="line-645"></a><span class="cm"> * 1. Convert files to filenames.</span> +<a id="line-646" name="line-646"></a><span class="cm"> */</span> +<a id="line-647" name="line-647"></a> <span class="kt">int</span> <span class="n">file_count</span> <span class="o">=</span> <span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">);</span> +<a id="line-648" name="line-648"></a> +<a id="line-649" name="line-649"></a> <span class="k">if</span> <span class="p">(</span><span class="n">file_count</span> <span class="o"><</span> <span class="mi">1</span><span class="p">)</span> +<a id="line-650" name="line-650"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-651" name="line-651"></a> +<a id="line-652" name="line-652"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">paths</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="p">,</span> <span class="n">file_count</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span> +<a id="line-653" name="line-653"></a> <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a id="line-654" name="line-654"></a> <span class="n">GList</span><span class="o">*</span> <span class="n">elem</span><span class="p">;</span> +<a id="line-655" name="line-655"></a> +<a id="line-656" name="line-656"></a> <span class="k">for</span> <span class="p">(</span><span class="n">elem</span> <span class="o">=</span> <span class="n">files</span><span class="p">;</span> <span class="n">elem</span><span class="p">;</span> <span class="n">elem</span> <span class="o">=</span> <span class="n">elem</span><span class="o">-></span><span class="n">next</span><span class="p">,</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a id="line-657" name="line-657"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">uri</span> <span class="o">=</span> <span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">elem</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> +<a id="line-658" name="line-658"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename_un</span> <span class="o">=</span> <span class="n">uri</span> <span class="o">?</span> <span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</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="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-659" name="line-659"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">filename</span> <span class="o">=</span> <span class="n">filename_un</span> <span class="o">?</span> <span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</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> <span class="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-660" name="line-660"></a> +<a id="line-661" name="line-661"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a id="line-662" name="line-662"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span> +<a id="line-663" name="line-663"></a> +<a id="line-664" name="line-664"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a id="line-665" name="line-665"></a> <span class="cm">/* oooh, filename wasn't correctly encoded, or isn't a local file. */</span> +<a id="line-666" name="line-666"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span> +<a id="line-667" name="line-667"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-668" name="line-668"></a> <span class="p">}</span> +<a id="line-669" name="line-669"></a> +<a id="line-670" name="line-670"></a> <span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">filename</span><span class="p">;</span> +<a id="line-671" name="line-671"></a> <span class="p">}</span> +<a id="line-672" name="line-672"></a> +<a id="line-673" name="line-673"></a> <span class="n">GAsyncQueue</span> <span class="o">*</span><span class="n">reply_queue</span> <span class="o">=</span> <span class="n">g_async_queue_new_full</span><span class="p">((</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="n">g_hash_table_unref</span><span class="p">);</span> +<a id="line-674" name="line-674"></a> +<a id="line-675" name="line-675"></a> <span class="cm">/*</span> +<a id="line-676" name="line-676"></a><span class="cm"> * 2. Create a DropboxGeneralCommand to call "icon_overlay_context_options"</span> +<a id="line-677" name="line-677"></a><span class="cm"> */</span> +<a id="line-678" name="line-678"></a> +<a id="line-679" name="line-679"></a> <span class="n">DropboxGeneralCommand</span> <span class="o">*</span><span class="n">dgc</span> <span class="o">=</span> <span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a id="line-680" name="line-680"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span> <span class="o">=</span> <span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a id="line-681" name="line-681"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_options"</span><span class="p">);</span> +<a id="line-682" name="line-682"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-683" name="line-683"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-684" name="line-684"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a id="line-685" name="line-685"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_strfreev</span><span class="p">);</span> +<a id="line-686" name="line-686"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span> <span class="n">paths</span><span class="p">);</span> +<a id="line-687" name="line-687"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">handler</span> <span class="o">=</span> <span class="n">get_file_items_callback</span><span class="p">;</span> +<a id="line-688" name="line-688"></a> <span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span> <span class="o">=</span> <span class="n">g_async_queue_ref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a id="line-689" name="line-689"></a> +<a id="line-690" name="line-690"></a> <span class="cm">/*</span> +<a id="line-691" name="line-691"></a><span class="cm"> * 3. Queue it up for the helper thread to run it.</span> +<a id="line-692" name="line-692"></a><span class="cm"> */</span> +<a id="line-693" name="line-693"></a> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span> <span class="o">=</span> <span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span> +<a id="line-694" name="line-694"></a> <span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> <span class="p">(</span><span class="n">DropboxCommand</span> <span class="o">*</span><span class="p">)</span> <span class="n">dgc</span><span class="p">);</span> +<a id="line-695" name="line-695"></a> +<a id="line-696" name="line-696"></a> <span class="cm">/*</span> +<a id="line-697" name="line-697"></a><span class="cm"> * 4. We have to block until it's done because caja expects a reply. But we will</span> +<a id="line-698" name="line-698"></a><span class="cm"> * only block for 50 ms for a reply.</span> +<a id="line-699" name="line-699"></a><span class="cm"> */</span> +<a id="line-700" name="line-700"></a> +<a id="line-701" name="line-701"></a> <span class="n">GHashTable</span> <span class="o">*</span><span class="n">context_options_response</span> <span class="o">=</span> <span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span> <span class="mi">50000</span><span class="p">);</span> +<a id="line-702" name="line-702"></a> <span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a id="line-703" name="line-703"></a> +<a id="line-704" name="line-704"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">context_options_response</span><span class="p">)</span> <span class="p">{</span> +<a id="line-705" name="line-705"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-706" name="line-706"></a> <span class="p">}</span> +<a id="line-707" name="line-707"></a> +<a id="line-708" name="line-708"></a> <span class="cm">/*</span> +<a id="line-709" name="line-709"></a><span class="cm"> * 5. Parse the reply.</span> +<a id="line-710" name="line-710"></a><span class="cm"> */</span> +<a id="line-711" name="line-711"></a> +<a id="line-712" name="line-712"></a> <span class="kt">char</span> <span class="o">**</span><span class="n">options</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">,</span> <span class="s">"options"</span><span class="p">);</span> +<a id="line-713" name="line-713"></a> <span class="n">GList</span> <span class="o">*</span><span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-714" name="line-714"></a> +<a id="line-715" name="line-715"></a> <span class="k">if</span> <span class="p">(</span><span class="n">options</span> <span class="o">&&</span> <span class="o">*</span><span class="n">options</span> <span class="o">&&</span> <span class="o">**</span><span class="n">options</span><span class="p">)</span> <span class="p">{</span> +<a id="line-716" name="line-716"></a> <span class="cm">/* build the menu */</span> +<a id="line-717" name="line-717"></a> <span class="n">CajaMenuItem</span> <span class="o">*</span><span class="n">root_item</span><span class="p">;</span> +<a id="line-718" name="line-718"></a> <span class="n">CajaMenu</span> <span class="o">*</span><span class="n">root_menu</span><span class="p">;</span> +<a id="line-719" name="line-719"></a> +<a id="line-720" name="line-720"></a> <span class="n">root_menu</span> <span class="o">=</span> <span class="n">caja_menu_new</span><span class="p">();</span> +<a id="line-721" name="line-721"></a> <span class="n">root_item</span> <span class="o">=</span> <span class="n">caja_menu_item_new</span><span class="p">(</span><span class="s">"CajaDropbox::root_item"</span><span class="p">,</span> +<a id="line-722" name="line-722"></a> <span class="s">"Dropbox"</span><span class="p">,</span> <span class="s">"Dropbox Options"</span><span class="p">,</span> <span class="s">"dropbox"</span><span class="p">);</span> +<a id="line-723" name="line-723"></a> +<a id="line-724" name="line-724"></a> <span class="n">toret</span> <span class="o">=</span> <span class="n">g_list_append</span><span class="p">(</span><span class="n">toret</span><span class="p">,</span> <span class="n">root_item</span><span class="p">);</span> +<a id="line-725" name="line-725"></a> <span class="n">GString</span> <span class="o">*</span><span class="n">action_string</span> <span class="o">=</span> <span class="n">g_string_new</span><span class="p">(</span><span class="s">"CajaDropbox::"</span><span class="p">);</span> +<a id="line-726" name="line-726"></a> +<a id="line-727" name="line-727"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">root_menu</span><span class="p">,</span> <span class="n">action_string</span><span class="p">,</span> +<a id="line-728" name="line-728"></a> <span class="n">toret</span><span class="p">,</span> <span class="n">provider</span><span class="p">,</span> <span class="n">files</span><span class="p">))</span> <span class="p">{</span> +<a id="line-729" name="line-729"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">toret</span><span class="p">);</span> +<a id="line-730" name="line-730"></a> <span class="n">toret</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-731" name="line-731"></a> <span class="p">}</span> +<a id="line-732" name="line-732"></a> +<a id="line-733" name="line-733"></a> <span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">root_item</span><span class="p">,</span> <span class="n">root_menu</span><span class="p">);</span> +<a id="line-734" name="line-734"></a> +<a id="line-735" name="line-735"></a> <span class="n">g_string_free</span><span class="p">(</span><span class="n">action_string</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a id="line-736" name="line-736"></a> <span class="n">g_object_unref</span><span class="p">(</span><span class="n">root_menu</span><span class="p">);</span> +<a id="line-737" name="line-737"></a> <span class="p">}</span> +<a id="line-738" name="line-738"></a> +<a id="line-739" name="line-739"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">);</span> +<a id="line-740" name="line-740"></a> +<a id="line-741" name="line-741"></a> <span class="k">return</span> <span class="n">toret</span><span class="p">;</span> +<a id="line-742" name="line-742"></a><span class="p">}</span> +<a id="line-743" name="line-743"></a> +<a id="line-744" name="line-744"></a><span class="n">gboolean</span> +<a id="line-745" name="line-745"></a><span class="nf">add_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span> <span class="n">emblem_paths_response</span><span class="p">)</span> +<a id="line-746" name="line-746"></a><span class="p">{</span> +<a id="line-747" name="line-747"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a id="line-748" name="line-748"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="error2"><--- Assuming that condition '!emblem_paths_response' is not redundant</span> +</span><a id="line-749" name="line-749"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a id="line-750" name="line-750"></a> +<a id="line-751" name="line-751"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">emblem_paths_list</span><span class="p">;</span> +<a id="line-752" name="line-752"></a><span class="hll"> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-753" name="line-753"></a> +<a id="line-754" name="line-754"></a> <span class="n">GtkIconTheme</span> <span class="o">*</span><span class="n">theme</span> <span class="o">=</span> <span class="n">gtk_icon_theme_get_default</span><span class="p">();</span> +<a id="line-755" name="line-755"></a> +<a id="line-756" name="line-756"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_response</span> <span class="o">&&</span><span class="error2"><--- Condition 'emblem_paths_response' is always true</span> +</span><a id="line-757" name="line-757"></a> <span class="p">(</span><span class="n">emblem_paths_list</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">)))</span> <span class="p">{</span> +<a id="line-758" name="line-758"></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">emblem_paths_list</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 id="line-759" name="line-759"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> +<a id="line-760" name="line-760"></a> <span class="n">gtk_icon_theme_append_search_path</span><span class="p">(</span><span class="n">theme</span><span class="p">,</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a id="line-761" name="line-761"></a> <span class="p">}</span> +<a id="line-762" name="line-762"></a> <span class="p">}</span> +<a id="line-763" name="line-763"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a id="line-764" name="line-764"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a id="line-765" name="line-765"></a><span class="p">}</span> +<a id="line-766" name="line-766"></a> +<a id="line-767" name="line-767"></a><span class="n">gboolean</span> +<a id="line-768" name="line-768"></a><span class="nf">remove_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span> <span class="n">emblem_paths_response</span><span class="p">)</span> +<a id="line-769" name="line-769"></a><span class="p">{</span> +<a id="line-770" name="line-770"></a> <span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a id="line-771" name="line-771"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span> +<a id="line-772" name="line-772"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a id="line-773" name="line-773"></a> +<a id="line-774" name="line-774"></a> <span class="n">gchar</span> <span class="o">**</span><span class="n">emblem_paths_list</span> <span class="o">=</span> <span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">);</span> +<a id="line-775" name="line-775"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_list</span><span class="p">)</span> +<a id="line-776" name="line-776"></a> <span class="k">goto</span> <span class="n">exit</span><span class="p">;</span> +<a id="line-777" name="line-777"></a> +<a id="line-778" name="line-778"></a> <span class="c1">// We need to remove the old paths.</span> +<a id="line-779" name="line-779"></a> <span class="n">GtkIconTheme</span> <span class="o">*</span> <span class="n">icon_theme</span> <span class="o">=</span> <span class="n">gtk_icon_theme_get_default</span><span class="p">();</span> +<a id="line-780" name="line-780"></a> <span class="n">gchar</span> <span class="o">**</span> <span class="n">paths</span><span class="p">;</span> +<a id="line-781" name="line-781"></a> <span class="n">gint</span> <span class="n">path_count</span><span class="p">;</span> +<a id="line-782" name="line-782"></a> +<a id="line-783" name="line-783"></a> <span class="n">gtk_icon_theme_get_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span> <span class="o">&</span><span class="n">paths</span><span class="p">,</span> <span class="o">&</span><span class="n">path_count</span><span class="p">);</span> +<a id="line-784" name="line-784"></a> +<a id="line-785" name="line-785"></a> <span class="n">gint</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">out</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a id="line-786" name="line-786"></a> <span class="n">gboolean</span> <span class="n">found</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a id="line-787" name="line-787"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">path_count</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a id="line-788" name="line-788"></a> <span class="n">gboolean</span> <span class="n">keep</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a id="line-789" name="line-789"></a> <span class="k">for</span> <span class="p">(</span><span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">j</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a id="line-790" name="line-790"></a> <span class="k">if</span> <span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="p">{</span> +<a id="line-791" name="line-791"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">g_strcmp0</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span> <span class="p">{</span> +<a id="line-792" name="line-792"></a> <span class="n">found</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a id="line-793" name="line-793"></a> <span class="n">keep</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a id="line-794" name="line-794"></a> <span class="n">g_free</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a id="line-795" name="line-795"></a> <span class="k">break</span><span class="p">;</span> +<a id="line-796" name="line-796"></a> <span class="p">}</span> +<a id="line-797" name="line-797"></a> <span class="p">}</span> +<a id="line-798" name="line-798"></a> <span class="p">}</span> +<a id="line-799" name="line-799"></a> <span class="k">if</span> <span class="p">(</span><span class="n">keep</span><span class="p">)</span> <span class="p">{</span> +<a id="line-800" name="line-800"></a> <span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span> <span class="o">=</span> <span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a id="line-801" name="line-801"></a> <span class="n">out</span><span class="o">++</span><span class="p">;</span> +<a id="line-802" name="line-802"></a> <span class="p">}</span> +<a id="line-803" name="line-803"></a> <span class="p">}</span> +<a id="line-804" name="line-804"></a> +<a id="line-805" name="line-805"></a> <span class="cm">/* If we found one we need to reset the path to</span> +<a id="line-806" name="line-806"></a><span class="cm"> accomodate the changes */</span> +<a id="line-807" name="line-807"></a> <span class="k">if</span> <span class="p">(</span><span class="n">found</span><span class="p">)</span> <span class="p">{</span> +<a id="line-808" name="line-808"></a> <span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="cm">/* Clear the last one */</span> +<a id="line-809" name="line-809"></a> <span class="n">gtk_icon_theme_set_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span> <span class="p">(</span><span class="k">const</span> <span class="n">gchar</span> <span class="o">**</span><span class="p">)</span><span class="n">paths</span><span class="p">,</span> <span class="n">out</span><span class="p">);</span> +<a id="line-810" name="line-810"></a> <span class="p">}</span> +<a id="line-811" name="line-811"></a> +<a id="line-812" name="line-812"></a> <span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span> +<a id="line-813" name="line-813"></a><span class="nl">exit</span><span class="p">:</span> +<a id="line-814" name="line-814"></a> <span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a id="line-815" name="line-815"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a id="line-816" name="line-816"></a><span class="p">}</span> +<a id="line-817" name="line-817"></a> +<a id="line-818" name="line-818"></a><span class="kt">void</span> <span class="nf">get_emblem_paths_cb</span><span class="p">(</span><span class="n">GHashTable</span> <span class="o">*</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> +<a id="line-819" name="line-819"></a><span class="p">{</span> +<a id="line-820" name="line-820"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span> <span class="p">{</span> +<a id="line-821" name="line-821"></a> <span class="n">emblem_paths_response</span> <span class="o">=</span> <span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-822" name="line-822"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">);</span> +<a id="line-823" name="line-823"></a> <span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span> <span class="s">"path"</span><span class="p">,</span> <span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">);</span> +<a id="line-824" name="line-824"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a id="line-825" name="line-825"></a> <span class="cm">/* Increase the ref so that finish_general_command doesn't delete it. */</span> +<a id="line-826" name="line-826"></a> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a id="line-827" name="line-827"></a> <span class="p">}</span> +<a id="line-828" name="line-828"></a> +<a id="line-829" name="line-829"></a> <span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a id="line-830" name="line-830"></a> <span class="k">if</span> <span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">)</span> <span class="p">{</span> +<a id="line-831" name="line-831"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">remove_emblem_paths</span><span class="p">,</span> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span> +<a id="line-832" name="line-832"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-833" name="line-833"></a> <span class="p">}</span> +<a id="line-834" name="line-834"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="n">emblem_paths_response</span><span class="p">;</span> +<a id="line-835" name="line-835"></a> <span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a id="line-836" name="line-836"></a> +<a id="line-837" name="line-837"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">add_emblem_paths</span><span class="p">,</span> <span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">));</span> +<a id="line-838" name="line-838"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">reset_all_files</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a id="line-839" name="line-839"></a><span class="p">}</span> +<a id="line-840" name="line-840"></a> +<a id="line-841" name="line-841"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-842" name="line-842"></a><span class="nf">on_connect</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a id="line-843" name="line-843"></a> <span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span> +<a id="line-844" name="line-844"></a> +<a id="line-845" name="line-845"></a> <span class="n">dropbox_command_client_send_command</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> +<a id="line-846" name="line-846"></a> <span class="p">(</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)</span> <span class="n">get_emblem_paths_cb</span><span class="p">,</span> +<a id="line-847" name="line-847"></a><span class="hll"> <span class="n">cvs</span><span class="p">,</span> <span class="s">"get_emblem_paths"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span><div class="verbose expandable"><span class="error2"><--- Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. <span class="marker">[+]</span></span><div class="content">Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. +The C99 standard, in section 7.15.1.1, states that if the type used by va_arg() is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined. +The value of the NULL macro is an implementation-defined null pointer constant (7.17), which can be any integer constant expression with the value 0, or such an expression casted to (void*) (6.3.2.3). This includes values like 0, 0L, or even 0LL. +In practice on common architectures, this will cause real crashes if sizeof(int) != sizeof(void*), and NULL is defined to 0 or any other null pointer constant that promotes to int. +To reproduce you might be able to use this little code example on 64bit platforms. If the output includes "ERROR", the sentinel had only 4 out of 8 bytes initialized to zero and was not detected as the final argument to stop argument processing via va_arg(). Changing the 0 to (void*)0 or 0L will make the "ERROR" output go away. +#include <stdarg.h> +#include <stdio.h> + +void f(char *s, ...) { + va_list ap; + va_start(ap,s); + for (;;) { + char *p = va_arg(ap,char*); + printf("%018p, %s\n", p, (long)p & 255 ? p : ""); + if(!p) break; + } + va_end(ap); +} + +void g() { + char *s2 = "x"; + char *s3 = "ERROR"; + + // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64 + f("first", s2, s2, s2, s2, s2, 0, s3, (char*)0); +} + +void h() { + int i; + volatile unsigned char a[1000]; + for (i = 0; i<sizeof(a); i++) + a[i] = -1; +} + +int main() { + h(); + g(); + return 0; +}</div></div> +</span><a id="line-848" name="line-848"></a><span class="p">}</span> +<a id="line-849" name="line-849"></a> +<a id="line-850" name="line-850"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-851" name="line-851"></a><span class="nf">on_disconnect</span><span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a id="line-852" name="line-852"></a> <span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span> +<a id="line-853" name="line-853"></a> +<a id="line-854" name="line-854"></a> <span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a id="line-855" name="line-855"></a> <span class="cm">/* This call will free the data too. */</span> +<a id="line-856" name="line-856"></a> <span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span> <span class="n">remove_emblem_paths</span><span class="p">,</span> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span> +<a id="line-857" name="line-857"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-858" name="line-858"></a> <span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a id="line-859" name="line-859"></a><span class="p">}</span> +<a id="line-860" name="line-860"></a> +<a id="line-861" name="line-861"></a> +<a id="line-862" name="line-862"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-863" name="line-863"></a><span class="nf">caja_dropbox_menu_provider_iface_init</span> <span class="p">(</span><span class="n">CajaMenuProviderIface</span> <span class="o">*</span><span class="n">iface</span><span class="p">)</span> <span class="p">{</span> +<a id="line-864" name="line-864"></a> <span class="n">iface</span><span class="o">-></span><span class="n">get_file_items</span> <span class="o">=</span> <span class="n">caja_dropbox_get_file_items</span><span class="p">;</span> +<a id="line-865" name="line-865"></a> <span class="k">return</span><span class="p">;</span> +<a id="line-866" name="line-866"></a><span class="p">}</span> +<a id="line-867" name="line-867"></a> +<a id="line-868" name="line-868"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-869" name="line-869"></a><span class="nf">caja_dropbox_info_provider_iface_init</span> <span class="p">(</span><span class="n">CajaInfoProviderIface</span> <span class="o">*</span><span class="n">iface</span><span class="p">)</span> <span class="p">{</span> +<a id="line-870" name="line-870"></a> <span class="n">iface</span><span class="o">-></span><span class="n">update_file_info</span> <span class="o">=</span> <span class="n">caja_dropbox_update_file_info</span><span class="p">;</span> +<a id="line-871" name="line-871"></a> <span class="n">iface</span><span class="o">-></span><span class="n">cancel_update</span> <span class="o">=</span> <span class="n">caja_dropbox_cancel_update</span><span class="p">;</span> +<a id="line-872" name="line-872"></a> <span class="k">return</span><span class="p">;</span> +<a id="line-873" name="line-873"></a><span class="p">}</span> +<a id="line-874" name="line-874"></a> +<a id="line-875" name="line-875"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-876" name="line-876"></a><span class="nf">caja_dropbox_instance_init</span> <span class="p">(</span><span class="n">CajaDropbox</span> <span class="o">*</span><span class="n">cvs</span><span class="p">)</span> <span class="p">{</span> +<a id="line-877" name="line-877"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-878" name="line-878"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-879" name="line-879"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">,</span> +<a id="line-880" name="line-880"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">);</span> +<a id="line-881" name="line-881"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span> <span class="o">=</span> <span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span> <span class="n">g_direct_hash</span><span class="p">,</span> +<a id="line-882" name="line-882"></a> <span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span> <span class="n">g_direct_equal</span><span class="p">,</span> +<a id="line-883" name="line-883"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a id="line-884" name="line-884"></a> <span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span> <span class="n">g_free</span><span class="p">);</span> +<a id="line-885" name="line-885"></a> <span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a id="line-886" name="line-886"></a> <span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a id="line-887" name="line-887"></a> +<a id="line-888" name="line-888"></a> <span class="cm">/* setup the connection obj*/</span> +<a id="line-889" name="line-889"></a> <span class="n">dropbox_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span> +<a id="line-890" name="line-890"></a> +<a id="line-891" name="line-891"></a> <span class="cm">/* our hooks */</span> +<a id="line-892" name="line-892"></a> <span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span> <span class="s">"shell_touch"</span><span class="p">,</span> +<a id="line-893" name="line-893"></a> <span class="p">(</span><span class="n">DropboxUpdateHook</span><span class="p">)</span> <span class="n">handle_shell_touch</span><span class="p">,</span> <span class="n">cvs</span><span class="p">);</span> +<a id="line-894" name="line-894"></a> +<a id="line-895" name="line-895"></a> <span class="cm">/* add connection handlers */</span> +<a id="line-896" name="line-896"></a> <span class="n">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span> +<a id="line-897" name="line-897"></a> <span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span> <span class="n">on_connect</span><span class="p">,</span> +<a id="line-898" name="line-898"></a> <span class="n">cvs</span><span class="p">);</span> +<a id="line-899" name="line-899"></a> <span class="n">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span> +<a id="line-900" name="line-900"></a> <span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span> <span class="n">on_disconnect</span><span class="p">,</span> +<a id="line-901" name="line-901"></a> <span class="n">cvs</span><span class="p">);</span> +<a id="line-902" name="line-902"></a> +<a id="line-903" name="line-903"></a> <span class="cm">/* now start the connection */</span> +<a id="line-904" name="line-904"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"about to start client connection"</span><span class="p">);</span> +<a id="line-905" name="line-905"></a> <span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span> +<a id="line-906" name="line-906"></a> +<a id="line-907" name="line-907"></a> <span class="k">return</span><span class="p">;</span> +<a id="line-908" name="line-908"></a><span class="p">}</span> +<a id="line-909" name="line-909"></a> +<a id="line-910" name="line-910"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-911" name="line-911"></a><span class="nf">caja_dropbox_class_init</span> <span class="p">(</span><span class="n">CajaDropboxClass</span> <span class="o">*</span><span class="n">class</span><span class="p">)</span> <span class="p">{</span> +<a id="line-912" name="line-912"></a><span class="p">}</span> +<a id="line-913" name="line-913"></a> +<a id="line-914" name="line-914"></a><span class="k">static</span> <span class="kt">void</span> +<a id="line-915" name="line-915"></a><span class="nf">caja_dropbox_class_finalize</span> <span class="p">(</span><span class="n">CajaDropboxClass</span> <span class="o">*</span><span class="n">class</span><span class="p">)</span> <span class="p">{</span> +<a id="line-916" name="line-916"></a> <span class="n">debug</span><span class="p">(</span><span class="s">"just checking"</span><span class="p">);</span> +<a id="line-917" name="line-917"></a> <span class="cm">/* kill threads here? */</span> +<a id="line-918" name="line-918"></a><span class="p">}</span> +<a id="line-919" name="line-919"></a> +<a id="line-920" name="line-920"></a><span class="n">GType</span> +<a id="line-921" name="line-921"></a><span class="nf">caja_dropbox_get_type</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span> +<a id="line-922" name="line-922"></a> <span class="k">return</span> <span class="n">dropbox_type</span><span class="p">;</span> +<a id="line-923" name="line-923"></a><span class="p">}</span> +<a id="line-924" name="line-924"></a> +<a id="line-925" name="line-925"></a><span class="kt">void</span> +<a id="line-926" name="line-926"></a><span class="nf">caja_dropbox_register_type</span> <span class="p">(</span><span class="n">GTypeModule</span> <span class="o">*</span><span class="n">module</span><span class="p">)</span> <span class="p">{</span> +<a id="line-927" name="line-927"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GTypeInfo</span> <span class="n">info</span> <span class="o">=</span> <span class="p">{</span> +<a id="line-928" name="line-928"></a> <span class="k">sizeof</span> <span class="p">(</span><span class="n">CajaDropboxClass</span><span class="p">),</span> +<a id="line-929" name="line-929"></a> <span class="p">(</span><span class="n">GBaseInitFunc</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a id="line-930" name="line-930"></a> <span class="p">(</span><span class="n">GBaseFinalizeFunc</span><span class="p">)</span> <span class="nb">NULL</span><span class="p">,</span> +<a id="line-931" name="line-931"></a> <span class="p">(</span><span class="n">GClassInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_class_init</span><span class="p">,</span> +<a id="line-932" name="line-932"></a> <span class="p">(</span><span class="n">GClassFinalizeFunc</span><span class="p">)</span> <span class="n">caja_dropbox_class_finalize</span><span class="p">,</span> +<a id="line-933" name="line-933"></a> <span class="nb">NULL</span><span class="p">,</span> +<a id="line-934" name="line-934"></a> <span class="k">sizeof</span> <span class="p">(</span><span class="n">CajaDropbox</span><span class="p">),</span> +<a id="line-935" name="line-935"></a> <span class="mi">0</span><span class="p">,</span> +<a id="line-936" name="line-936"></a> <span class="p">(</span><span class="n">GInstanceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_instance_init</span><span class="p">,</span> +<a id="line-937" name="line-937"></a> <span class="p">};</span> +<a id="line-938" name="line-938"></a> +<a id="line-939" name="line-939"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GInterfaceInfo</span> <span class="n">menu_provider_iface_info</span> <span class="o">=</span> <span class="p">{</span> +<a id="line-940" name="line-940"></a> <span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_menu_provider_iface_init</span><span class="p">,</span> +<a id="line-941" name="line-941"></a> <span class="nb">NULL</span><span class="p">,</span> +<a id="line-942" name="line-942"></a> <span class="nb">NULL</span> +<a id="line-943" name="line-943"></a> <span class="p">};</span> +<a id="line-944" name="line-944"></a> +<a id="line-945" name="line-945"></a> <span class="k">static</span> <span class="k">const</span> <span class="n">GInterfaceInfo</span> <span class="n">info_provider_iface_info</span> <span class="o">=</span> <span class="p">{</span> +<a id="line-946" name="line-946"></a> <span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span> <span class="n">caja_dropbox_info_provider_iface_init</span><span class="p">,</span> +<a id="line-947" name="line-947"></a> <span class="nb">NULL</span><span class="p">,</span> +<a id="line-948" name="line-948"></a> <span class="nb">NULL</span> +<a id="line-949" name="line-949"></a> <span class="p">};</span> +<a id="line-950" name="line-950"></a> +<a id="line-951" name="line-951"></a> <span class="n">dropbox_type</span> <span class="o">=</span> +<a id="line-952" name="line-952"></a> <span class="n">g_type_module_register_type</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a id="line-953" name="line-953"></a> <span class="n">G_TYPE_OBJECT</span><span class="p">,</span> +<a id="line-954" name="line-954"></a> <span class="s">"CajaDropbox"</span><span class="p">,</span> +<a id="line-955" name="line-955"></a> <span class="o">&</span><span class="n">info</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a id="line-956" name="line-956"></a> +<a id="line-957" name="line-957"></a> <span class="n">g_type_module_add_interface</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a id="line-958" name="line-958"></a> <span class="n">dropbox_type</span><span class="p">,</span> +<a id="line-959" name="line-959"></a> <span class="n">CAJA_TYPE_MENU_PROVIDER</span><span class="p">,</span> +<a id="line-960" name="line-960"></a> <span class="o">&</span><span class="n">menu_provider_iface_info</span><span class="p">);</span> +<a id="line-961" name="line-961"></a> +<a id="line-962" name="line-962"></a> <span class="n">g_type_module_add_interface</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a id="line-963" name="line-963"></a> <span class="n">dropbox_type</span><span class="p">,</span> +<a id="line-964" name="line-964"></a> <span class="n">CAJA_TYPE_INFO_PROVIDER</span><span class="p">,</span> +<a id="line-965" name="line-965"></a> <span class="o">&</span><span class="n">info_provider_iface_info</span><span class="p">);</span> +<a id="line-966" name="line-966"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.6 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="https://cppcheck.sourceforge.io">https://cppcheck.sourceforge.io</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/index.html b/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/index.html new file mode 100644 index 0000000..5a6d450 --- /dev/null +++ b/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/index.html @@ -0,0 +1,122 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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 - caja-dropbox: </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>2</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>1</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="missingIncludeSystem" name="missingIncludeSystem" checked></td><td>1</td><td>missingIncludeSystem</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="varFuncNullUB" name="varFuncNullUB" checked></td><td>1</td><td>varFuncNullUB</td></tr> + <tr><td></td><td>5</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="1.html"></a></td></tr> + <tr class="missingIncludeSystem"><td></td><td>missingIncludeSystem</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">src/caja-dropbox.c</a></td></tr> + <tr class="variableScope"><td><a href="0.html#line-312">312</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 'file' can be reduced.</td></tr> + <tr class="variableScope"><td><a href="0.html#line-752">752</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 'i' can be reduced.</td></tr> + <tr class="knownConditionTrueFalse"><td><a href="0.html#line-756">756</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td>Condition 'emblem_paths_response' is always true</td></tr> + <tr class="varFuncNullUB"><td><a href="0.html#line-847">847</a></td><td>varFuncNullUB</td><td><a href="https://cwe.mitre.org/data/definitions/475.html">475</a></td><td>portability</td><td>Passing NULL after the last typed argument to a variadic function leads to undefined behaviour.</td></tr> + </table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.6 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="https://cppcheck.sourceforge.io">https://cppcheck.sourceforge.io</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/stats.html b/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/stats.html new file mode 100644 index 0000000..d32b0c2 --- /dev/null +++ b/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/stats.html @@ -0,0 +1,108 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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 - caja-dropbox: 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 portability severity, total findings: 1<br> +   1 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> +<p>Top 10 files for style severity, total findings: 3<br> +   3 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> + + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.6 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="https://cppcheck.sourceforge.io">https://cppcheck.sourceforge.io</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/style.css b/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/style.css new file mode 100644 index 0000000..07125f4 --- /dev/null +++ b/2022-02-12-111726-5833-cppcheck@f4453b2d7fce_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; +} diff --git a/2022-10-29-140736-5910-1@8ec754ff8335_master/index.html b/2022-10-29-140736-5910-1@8ec754ff8335_master/index.html new file mode 100644 index 0000000..b9d2aab --- /dev/null +++ b/2022-10-29-140736-5910-1@8ec754ff8335_master/index.html @@ -0,0 +1,94 @@ +<html> +<head> +<title>rootdir - scan-build results</title> +<link type="text/css" rel="stylesheet" href="scanview.css"/> +<script src="sorttable.js"></script> +<script language='javascript' type="text/javascript"> +function SetDisplay(RowClass, DisplayVal) +{ + var Rows = document.getElementsByTagName("tr"); + for ( var i = 0 ; i < Rows.length; ++i ) { + if (Rows[i].className == RowClass) { + Rows[i].style.display = DisplayVal; + } + } +} + +function CopyCheckedStateToCheckButtons(SummaryCheckButton) { + var Inputs = document.getElementsByTagName("input"); + for ( var i = 0 ; i < Inputs.length; ++i ) { + if (Inputs[i].type == "checkbox") { + if(Inputs[i] != SummaryCheckButton) { + Inputs[i].checked = SummaryCheckButton.checked; + Inputs[i].onclick(); + } + } + } +} + +function returnObjById( id ) { + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +var NumUnchecked = 0; + +function ToggleDisplay(CheckButton, ClassName) { + if (CheckButton.checked) { + SetDisplay(ClassName, ""); + if (--NumUnchecked == 0) { + returnObjById("AllBugsCheck").checked = true; + } + } + else { + SetDisplay(ClassName, "none"); + NumUnchecked++; + returnObjById("AllBugsCheck").checked = false; + } +} +</script> +<!-- SUMMARYENDHEAD --> +</head> +<body> +<h1>rootdir - scan-build results</h1> + +<table> +<tr><th>User:</th><td>root@b9260aaaf731</td></tr> +<tr><th>Working Directory:</th><td>/rootdir</td></tr> +<tr><th>Command Line:</th><td>make -j 2</td></tr> +<tr><th>Clang Version:</th><td>clang version 14.0.5 (Fedora 14.0.5-1.fc36) +</td></tr> +<tr><th>Date:</th><td>Sat Oct 29 14:07:36 2022</td></tr> +</table> +<h2>Bug Summary</h2><table> +<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead> +<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">1</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr> +<tr><th>Logic error</th><th colspan=2></th></tr> +<tr><td class="SUMM_DESC">Cast from non-struct type to struct type</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_cast_from_non-struct_type_to_struct_type');" checked/></center></td></tr> +</table> +<h2>Reports</h2> + +<table class="sortable" style="table-layout:automatic"> +<thead><tr> + <td>Bug Group</td> + <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind"> ▾</span></td> + <td>File</td> + <td>Function/Method</td> + <td class="Q">Line</td> + <td class="Q">Path Length</td> + <td class="sorttable_nosort"></td> + <!-- REPORTBUGCOL --> +</tr></thead> +<tbody> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-1b9128.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-1b9128.html" --> +</tr> +</tbody> +</table> + +</body></html> diff --git a/2022-10-29-140736-5910-1@8ec754ff8335_master/report-1b9128.html b/2022-10-29-140736-5910-1@8ec754ff8335_master/report-1b9128.html new file mode 100644 index 0000000..7e828b7 --- /dev/null +++ b/2022-10-29-140736-5910-1@8ec754ff8335_master/report-1b9128.html @@ -0,0 +1,1553 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { position:relative } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.msg.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.5 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -D PIC -internal-isystem /usr/lib64/clang/14.0.5/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-10-29-140736-5910-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // SHIFT + S + if (event.shiftKey && event.keyCode == 83) { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].click(); + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> + <input type="checkbox" name="showArrows" + id="showArrows" style="margin-left: 10px" /> + <label for="showArrows"> + Show control flow arrows + </label> +</form> + +<script type='text/javascript'> +// Return range of numbers from a range [lower, upper). +function range(lower, upper) { + var array = []; + for (var i = lower; i <= upper; ++i) { + array.push(i); + } + return array; +} + +var getRelatedArrowIndices = function(pathId) { + // HTML numeration of events is a bit different than it is in the path. + // Everything is rotated one step to the right, so the last element + // (error diagnostic) has index 0. + if (pathId == 0) { + // arrowIndices has at least 2 elements + pathId = arrowIndices.length - 1; + } + + return range(arrowIndices[pathId], arrowIndices[pathId - 1]); +} + +var highlightArrowsForSelectedEvent = function() { + const selectedNum = findNum(); + const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum); + arrowIndicesToHighlight.forEach((index) => { + var arrow = document.querySelector("#arrow" + index); + if(arrow) { + classListAdd(arrow, "selected") + } + }); +} + +var getAbsoluteBoundingRect = function(element) { + const relative = element.getBoundingClientRect(); + return { + left: relative.left + window.pageXOffset, + right: relative.right + window.pageXOffset, + top: relative.top + window.pageYOffset, + bottom: relative.bottom + window.pageYOffset, + height: relative.height, + width: relative.width + }; +} + +var drawArrow = function(index) { + // This function is based on the great answer from SO: + // https://stackoverflow.com/a/39575674/11582326 + var start = document.querySelector("#start" + index); + var end = document.querySelector("#end" + index); + var arrow = document.querySelector("#arrow" + index); + + var startRect = getAbsoluteBoundingRect(start); + var endRect = getAbsoluteBoundingRect(end); + + // It is an arrow from a token to itself, no need to visualize it. + if (startRect.top == endRect.top && + startRect.left == endRect.left) + return; + + // Each arrow is a very simple Bézier curve, with two nodes and + // two handles. So, we need to calculate four points in the window: + // * start node + var posStart = { x: 0, y: 0 }; + // * end node + var posEnd = { x: 0, y: 0 }; + // * handle for the start node + var startHandle = { x: 0, y: 0 }; + // * handle for the end node + var endHandle = { x: 0, y: 0 }; + // One can visualize it as follows: + // + // start handle + // / + // X"""_.-""""X + // .' \ + // / start node + // | + // | + // | end node + // \ / + // `->X + // X-' + // \ + // end handle + // + // NOTE: (0, 0) is the top left corner of the window. + + // We have 3 similar, but still different scenarios to cover: + // + // 1. Two tokens on different lines. + // -xxx + // / + // \ + // -> xxx + // In this situation, we draw arrow on the left curving to the left. + // 2. Two tokens on the same line, and the destination is on the right. + // ____ + // / \ + // / V + // xxx xxx + // In this situation, we draw arrow above curving upwards. + // 3. Two tokens on the same line, and the destination is on the left. + // xxx xxx + // ^ / + // \____/ + // In this situation, we draw arrow below curving downwards. + const onDifferentLines = startRect.top <= endRect.top - 5 || + startRect.top >= endRect.top + 5; + const leftToRight = startRect.left < endRect.left; + + // NOTE: various magic constants are chosen empirically for + // better positioning and look + if (onDifferentLines) { + // Case #1 + const topToBottom = startRect.top < endRect.top; + posStart.x = startRect.left - 1; + // We don't want to start it at the top left corner of the token, + // it doesn't feel like this is where the arrow comes from. + // For this reason, we start it in the middle of the left side + // of the token. + posStart.y = startRect.top + startRect.height / 2; + + // End node has arrow head and we give it a bit more space. + posEnd.x = endRect.left - 4; + posEnd.y = endRect.top; + + // Utility object with x and y offsets for handles. + var curvature = { + // We want bottom-to-top arrow to curve a bit more, so it doesn't + // overlap much with top-to-bottom curves (much more frequent). + x: topToBottom ? 15 : 25, + y: Math.min((posEnd.y - posStart.y) / 3, 10) + } + + // When destination is on the different line, we can make a + // curvier arrow because we have space for it. + // So, instead of using + // + // startHandle.x = posStart.x - curvature.x + // endHandle.x = posEnd.x - curvature.x + // + // We use the leftmost of these two values for both handles. + startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x; + endHandle.x = startHandle.x; + + // Curving downwards from the start node... + startHandle.y = posStart.y + curvature.y; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else if (leftToRight) { + // Case #2 + // Starting from the top right corner... + posStart.x = startRect.right - 1; + posStart.y = startRect.top; + + // ...and ending at the top left corner of the end token. + posEnd.x = endRect.left + 1; + posEnd.y = endRect.top - 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posEnd.x - posStart.x) / 3, 15), + y: 5 + } + + // Curving to the right... + startHandle.x = posStart.x + curvature.x; + // ... and upwards from the start node. + startHandle.y = posStart.y - curvature.y; + + // And to the left... + endHandle.x = posEnd.x - curvature.x; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else { + // Case #3 + // Starting from the bottom right corner... + posStart.x = startRect.right; + posStart.y = startRect.bottom; + + // ...and ending also at the bottom right corner, but of the end token. + posEnd.x = endRect.right - 1; + posEnd.y = endRect.bottom + 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posStart.x - posEnd.x) / 3, 15), + y: 5 + } + + // Curving to the left... + startHandle.x = posStart.x - curvature.x; + // ... and downwards from the start node. + startHandle.y = posStart.y + curvature.y; + + // And to the right... + endHandle.x = posEnd.x + curvature.x; + // ... and downwards from the end node. + endHandle.y = posEnd.y + curvature.y; + } + + // Put it all together into a path. + // More information on the format: + // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths + var pathStr = "M" + posStart.x + "," + posStart.y + " " + + "C" + startHandle.x + "," + startHandle.y + " " + + endHandle.x + "," + endHandle.y + " " + + posEnd.x + "," + posEnd.y; + + arrow.setAttribute("d", pathStr); +}; + +var drawArrows = function() { + const numOfArrows = document.querySelectorAll("path[id^=arrow]").length; + for (var i = 0; i < numOfArrows; ++i) { + drawArrow(i); + } +} + +var toggleArrows = function(event) { + const arrows = document.querySelector("#arrows"); + if (event.target.checked) { + arrows.setAttribute("visibility", "visible"); + } else { + arrows.setAttribute("visibility", "hidden"); + } +} + +window.addEventListener("resize", drawArrows); +document.addEventListener("DOMContentLoaded", function() { + // Whenever we show invocation, locations change, i.e. we + // need to redraw arrows. + document + .querySelector('input[id="showinvocation"]') + .addEventListener("click", drawArrows); + // Hiding irrelevant lines also should cause arrow rerender. + document + .querySelector('input[name="showCounterexample"]') + .addEventListener("change", drawArrows); + document + .querySelector('input[name="showArrows"]') + .addEventListener("change", toggleArrows); + drawArrows(); + // Default highlighting for the last event. + highlightArrowsForSelectedEvent(); +}); +</script> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".msg.selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var classListAdd = function(el, theClass) { + if(!el.className.baseVal) + el.className += " " + theClass; + else + el.className.baseVal += " " + theClass; +}; + +var classListRemove = function(el, theClass) { + var className = (!el.className.baseVal) ? + el.className : el.className.baseVal; + className = className.replace(" " + theClass, ""); + if(!el.className.baseVal) + el.className = className; + else + el.className.baseVal = className; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + classListRemove(s, "selected"); + }); + classListAdd(el, "selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); + highlightArrowsForSelectedEvent(); +}; + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // key 'j' + if (event.keyCode == 74) { + navigateTo(/*up=*/false); + // key 'k' + } else if (event.keyCode == 75) { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> + +<style type="text/css"> + svg { + position:absolute; + top:0; + left:0; + height:100%; + width:100%; + pointer-events: none; + overflow: visible + } + .arrow { + stroke-opacity: 0.2; + stroke-width: 1; + marker-end: url(#arrowhead); + } + + .arrow.selected { + stroke-opacity: 0.6; + stroke-width: 2; + marker-end: url(#arrowheadSelected); + } + + .arrowhead { + orient: auto; + stroke: none; + opacity: 0.6; + fill: blue; + } +</style> +<svg xmlns="http://www.w3.org/2000/svg"> + <defs> + <marker id="arrowheadSelected" class="arrowhead" opacity="0.6" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + <marker id="arrowhead" class="arrowhead" opacity="0.2" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + </defs> + <g id="arrows" fill="none" stroke="blue" visibility="hidden"> + + </g> +</svg> +<script type='text/javascript'> +const arrowIndices = [ 0,0 ] +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2022-10-29-140736-5910-1@8ec754ff8335_master/scanview.css b/2022-10-29-140736-5910-1@8ec754ff8335_master/scanview.css new file mode 100644 index 0000000..cf8a5a6 --- /dev/null +++ b/2022-10-29-140736-5910-1@8ec754ff8335_master/scanview.css @@ -0,0 +1,62 @@ +body { color:#000000; background-color:#ffffff } +body { font-family: Helvetica, sans-serif; font-size:9pt } +h1 { font-size: 14pt; } +h2 { font-size: 12pt; } +table { font-size:9pt } +table { border-spacing: 0px; border: 1px solid black } +th, table thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + font-weight: bold; font-family: Verdana; + white-space:nowrap; +} +.W { font-size:0px } +th, td { padding:5px; padding-left:8px; text-align:left } +td.SUMM_DESC { padding-left:12px } +td.DESC { white-space:pre } +td.Q { text-align:right } +td { text-align:left } +tbody.scrollContent { overflow:auto } + +table.form_group { + background-color: #ccc; + border: 1px solid #333; + padding: 2px; +} + +table.form_inner_group { + background-color: #ccc; + border: 1px solid #333; + padding: 0px; +} + +table.form { + background-color: #999; + border: 1px solid #333; + padding: 2px; +} + +td.form_label { + text-align: right; + vertical-align: top; +} +/* For one line entires */ +td.form_clabel { + text-align: right; + vertical-align: center; +} +td.form_value { + text-align: left; + vertical-align: top; +} +td.form_submit { + text-align: right; + vertical-align: top; +} + +h1.SubmitFail { + color: #f00; +} +h1.SubmitOk { +} diff --git a/2022-10-29-140736-5910-1@8ec754ff8335_master/sorttable.js b/2022-10-29-140736-5910-1@8ec754ff8335_master/sorttable.js new file mode 100644 index 0000000..32faa07 --- /dev/null +++ b/2022-10-29-140736-5910-1@8ec754ff8335_master/sorttable.js @@ -0,0 +1,492 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backward compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + //row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[�$�]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; diff --git a/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/0.html b/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/0.html new file mode 100644 index 0000000..10d21ac --- /dev/null +++ b/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/0.html @@ -0,0 +1,2231 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/caja-dropbox.c</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> caja-dropbox.c</p> +<a href="0.html#line-312"> variableScope 312</a><a href="0.html#line-752"> variableScope 752</a><a href="0.html#line-756"> knownConditionTrueFalse 756</a><a href="0.html#line-847"> varFuncNullUB 847</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span> +<span class="normal">114</span> +<span class="normal">115</span> +<span class="normal">116</span> +<span class="normal">117</span> +<span class="normal">118</span> +<span class="normal">119</span> +<span class="normal">120</span> +<span class="normal">121</span> +<span class="normal">122</span> +<span class="normal">123</span> +<span class="normal">124</span> +<span class="normal">125</span> +<span class="normal">126</span> +<span class="normal">127</span> +<span class="normal">128</span> +<span class="normal">129</span> +<span class="normal">130</span> +<span class="normal">131</span> +<span class="normal">132</span> +<span class="normal">133</span> +<span class="normal">134</span> +<span class="normal">135</span> +<span class="normal">136</span> +<span class="normal">137</span> +<span class="normal">138</span> +<span class="normal">139</span> +<span class="normal">140</span> +<span class="normal">141</span> +<span class="normal">142</span> +<span class="normal">143</span> +<span class="normal">144</span> +<span class="normal">145</span> +<span class="normal">146</span> +<span class="normal">147</span> +<span class="normal">148</span> +<span class="normal">149</span> +<span class="normal">150</span> +<span class="normal">151</span> +<span class="normal">152</span> +<span class="normal">153</span> +<span class="normal">154</span> +<span class="normal">155</span> +<span class="normal">156</span> +<span class="normal">157</span> +<span class="normal">158</span> +<span class="normal">159</span> +<span class="normal">160</span> +<span class="normal">161</span> +<span class="normal">162</span> +<span class="normal">163</span> +<span class="normal">164</span> +<span class="normal">165</span> +<span class="normal">166</span> +<span class="normal">167</span> +<span class="normal">168</span> +<span class="normal">169</span> +<span class="normal">170</span> +<span class="normal">171</span> +<span class="normal">172</span> +<span class="normal">173</span> +<span class="normal">174</span> +<span class="normal">175</span> +<span class="normal">176</span> +<span class="normal">177</span> +<span class="normal">178</span> +<span class="normal">179</span> +<span class="normal">180</span> +<span class="normal">181</span> +<span class="normal">182</span> +<span class="normal">183</span> +<span class="normal">184</span> +<span class="normal">185</span> +<span class="normal">186</span> +<span class="normal">187</span> +<span class="normal">188</span> +<span class="normal">189</span> +<span class="normal">190</span> +<span class="normal">191</span> +<span class="normal">192</span> +<span class="normal">193</span> +<span class="normal">194</span> +<span class="normal">195</span> +<span class="normal">196</span> +<span class="normal">197</span> +<span class="normal">198</span> +<span class="normal">199</span> +<span class="normal">200</span> +<span class="normal">201</span> +<span class="normal">202</span> +<span class="normal">203</span> +<span class="normal">204</span> +<span class="normal">205</span> +<span class="normal">206</span> +<span class="normal">207</span> +<span class="normal">208</span> +<span class="normal">209</span> +<span class="normal">210</span> +<span class="normal">211</span> +<span class="normal">212</span> +<span class="normal">213</span> +<span class="normal">214</span> +<span class="normal">215</span> +<span class="normal">216</span> +<span class="normal">217</span> +<span class="normal">218</span> +<span class="normal">219</span> +<span class="normal">220</span> +<span class="normal">221</span> +<span class="normal">222</span> +<span class="normal">223</span> +<span class="normal">224</span> +<span class="normal">225</span> +<span class="normal">226</span> +<span class="normal">227</span> +<span class="normal">228</span> +<span class="normal">229</span> +<span class="normal">230</span> +<span class="normal">231</span> +<span class="normal">232</span> +<span class="normal">233</span> +<span class="normal">234</span> +<span class="normal">235</span> +<span class="normal">236</span> +<span class="normal">237</span> +<span class="normal">238</span> +<span class="normal">239</span> +<span class="normal">240</span> +<span class="normal">241</span> +<span class="normal">242</span> +<span class="normal">243</span> +<span class="normal">244</span> +<span class="normal">245</span> +<span class="normal">246</span> +<span class="normal">247</span> +<span class="normal">248</span> +<span class="normal">249</span> +<span class="normal">250</span> +<span class="normal">251</span> +<span class="normal">252</span> +<span class="normal">253</span> +<span class="normal">254</span> +<span class="normal">255</span> +<span class="normal">256</span> +<span class="normal">257</span> +<span class="normal">258</span> +<span class="normal">259</span> +<span class="normal">260</span> +<span class="normal">261</span> +<span class="normal">262</span> +<span class="normal">263</span> +<span class="normal">264</span> +<span class="normal">265</span> +<span class="normal">266</span> +<span class="normal">267</span> +<span class="normal">268</span> +<span class="normal">269</span> +<span class="normal">270</span> +<span class="normal">271</span> +<span class="normal">272</span> +<span class="normal">273</span> +<span class="normal">274</span> +<span class="normal">275</span> +<span class="normal">276</span> +<span class="normal">277</span> +<span class="normal">278</span> +<span class="normal">279</span> +<span class="normal">280</span> +<span class="normal">281</span> +<span class="normal">282</span> +<span class="normal">283</span> +<span class="normal">284</span> +<span class="normal">285</span> +<span class="normal">286</span> +<span class="normal">287</span> +<span class="normal">288</span> +<span class="normal">289</span> +<span class="normal">290</span> +<span class="normal">291</span> +<span class="normal">292</span> +<span class="normal">293</span> +<span class="normal">294</span> +<span class="normal">295</span> +<span class="normal">296</span> +<span class="normal">297</span> +<span class="normal">298</span> +<span class="normal">299</span> +<span class="normal">300</span> +<span class="normal">301</span> +<span class="normal">302</span> +<span class="normal">303</span> +<span class="normal">304</span> +<span class="normal">305</span> +<span class="normal">306</span> +<span class="normal">307</span> +<span class="normal">308</span> +<span class="normal">309</span> +<span class="normal">310</span> +<span class="normal">311</span> +<span class="normal">312</span> +<span class="normal">313</span> +<span class="normal">314</span> +<span class="normal">315</span> +<span class="normal">316</span> +<span class="normal">317</span> +<span class="normal">318</span> +<span class="normal">319</span> +<span class="normal">320</span> +<span class="normal">321</span> +<span class="normal">322</span> +<span class="normal">323</span> +<span class="normal">324</span> +<span class="normal">325</span> +<span class="normal">326</span> +<span class="normal">327</span> +<span class="normal">328</span> +<span class="normal">329</span> +<span class="normal">330</span> +<span class="normal">331</span> +<span class="normal">332</span> +<span class="normal">333</span> +<span class="normal">334</span> +<span class="normal">335</span> +<span class="normal">336</span> +<span class="normal">337</span> +<span class="normal">338</span> +<span class="normal">339</span> +<span class="normal">340</span> +<span class="normal">341</span> +<span class="normal">342</span> +<span class="normal">343</span> +<span class="normal">344</span> +<span class="normal">345</span> +<span class="normal">346</span> +<span class="normal">347</span> +<span class="normal">348</span> +<span class="normal">349</span> +<span class="normal">350</span> +<span class="normal">351</span> +<span class="normal">352</span> +<span class="normal">353</span> +<span class="normal">354</span> +<span class="normal">355</span> +<span class="normal">356</span> +<span class="normal">357</span> +<span class="normal">358</span> +<span class="normal">359</span> +<span class="normal">360</span> +<span class="normal">361</span> +<span class="normal">362</span> +<span class="normal">363</span> +<span class="normal">364</span> +<span class="normal">365</span> +<span class="normal">366</span> +<span class="normal">367</span> +<span class="normal">368</span> +<span class="normal">369</span> +<span class="normal">370</span> +<span class="normal">371</span> +<span class="normal">372</span> +<span class="normal">373</span> +<span class="normal">374</span> +<span class="normal">375</span> +<span class="normal">376</span> +<span class="normal">377</span> +<span class="normal">378</span> +<span class="normal">379</span> +<span class="normal">380</span> +<span class="normal">381</span> +<span class="normal">382</span> +<span class="normal">383</span> +<span class="normal">384</span> +<span class="normal">385</span> +<span class="normal">386</span> +<span class="normal">387</span> +<span class="normal">388</span> +<span class="normal">389</span> +<span class="normal">390</span> +<span class="normal">391</span> +<span class="normal">392</span> +<span class="normal">393</span> +<span class="normal">394</span> +<span class="normal">395</span> +<span class="normal">396</span> +<span class="normal">397</span> +<span class="normal">398</span> +<span class="normal">399</span> +<span class="normal">400</span> +<span class="normal">401</span> +<span class="normal">402</span> +<span class="normal">403</span> +<span class="normal">404</span> +<span class="normal">405</span> +<span class="normal">406</span> +<span class="normal">407</span> +<span class="normal">408</span> +<span class="normal">409</span> +<span class="normal">410</span> +<span class="normal">411</span> +<span class="normal">412</span> +<span class="normal">413</span> +<span class="normal">414</span> +<span class="normal">415</span> +<span class="normal">416</span> +<span class="normal">417</span> +<span class="normal">418</span> +<span class="normal">419</span> +<span class="normal">420</span> +<span class="normal">421</span> +<span class="normal">422</span> +<span class="normal">423</span> +<span class="normal">424</span> +<span class="normal">425</span> +<span class="normal">426</span> +<span class="normal">427</span> +<span class="normal">428</span> +<span class="normal">429</span> +<span class="normal">430</span> +<span class="normal">431</span> +<span class="normal">432</span> +<span class="normal">433</span> +<span class="normal">434</span> +<span class="normal">435</span> +<span class="normal">436</span> +<span class="normal">437</span> +<span class="normal">438</span> +<span class="normal">439</span> +<span class="normal">440</span> +<span class="normal">441</span> +<span class="normal">442</span> +<span class="normal">443</span> +<span class="normal">444</span> +<span class="normal">445</span> +<span class="normal">446</span> +<span class="normal">447</span> +<span class="normal">448</span> +<span class="normal">449</span> +<span class="normal">450</span> +<span class="normal">451</span> +<span class="normal">452</span> +<span class="normal">453</span> +<span class="normal">454</span> +<span class="normal">455</span> +<span class="normal">456</span> +<span class="normal">457</span> +<span class="normal">458</span> +<span class="normal">459</span> +<span class="normal">460</span> +<span class="normal">461</span> +<span class="normal">462</span> +<span class="normal">463</span> +<span class="normal">464</span> +<span class="normal">465</span> +<span class="normal">466</span> +<span class="normal">467</span> +<span class="normal">468</span> +<span class="normal">469</span> +<span class="normal">470</span> +<span class="normal">471</span> +<span class="normal">472</span> +<span class="normal">473</span> +<span class="normal">474</span> +<span class="normal">475</span> +<span class="normal">476</span> +<span class="normal">477</span> +<span class="normal">478</span> +<span class="normal">479</span> +<span class="normal">480</span> +<span class="normal">481</span> +<span class="normal">482</span> +<span class="normal">483</span> +<span class="normal">484</span> +<span class="normal">485</span> +<span class="normal">486</span> +<span class="normal">487</span> +<span class="normal">488</span> +<span class="normal">489</span> +<span class="normal">490</span> +<span class="normal">491</span> +<span class="normal">492</span> +<span class="normal">493</span> +<span class="normal">494</span> +<span class="normal">495</span> +<span class="normal">496</span> +<span class="normal">497</span> +<span class="normal">498</span> +<span class="normal">499</span> +<span class="normal">500</span> +<span class="normal">501</span> +<span class="normal">502</span> +<span class="normal">503</span> +<span class="normal">504</span> +<span class="normal">505</span> +<span class="normal">506</span> +<span class="normal">507</span> +<span class="normal">508</span> +<span class="normal">509</span> +<span class="normal">510</span> +<span class="normal">511</span> +<span class="normal">512</span> +<span class="normal">513</span> +<span class="normal">514</span> +<span class="normal">515</span> +<span class="normal">516</span> +<span class="normal">517</span> +<span class="normal">518</span> +<span class="normal">519</span> +<span class="normal">520</span> +<span class="normal">521</span> +<span class="normal">522</span> +<span class="normal">523</span> +<span class="normal">524</span> +<span class="normal">525</span> +<span class="normal">526</span> +<span class="normal">527</span> +<span class="normal">528</span> +<span class="normal">529</span> +<span class="normal">530</span> +<span class="normal">531</span> +<span class="normal">532</span> +<span class="normal">533</span> +<span class="normal">534</span> +<span class="normal">535</span> +<span class="normal">536</span> +<span class="normal">537</span> +<span class="normal">538</span> +<span class="normal">539</span> +<span class="normal">540</span> +<span class="normal">541</span> +<span class="normal">542</span> +<span class="normal">543</span> +<span class="normal">544</span> +<span class="normal">545</span> +<span class="normal">546</span> +<span class="normal">547</span> +<span class="normal">548</span> +<span class="normal">549</span> +<span class="normal">550</span> +<span class="normal">551</span> +<span class="normal">552</span> +<span class="normal">553</span> +<span class="normal">554</span> +<span class="normal">555</span> +<span class="normal">556</span> +<span class="normal">557</span> +<span class="normal">558</span> +<span class="normal">559</span> +<span class="normal">560</span> +<span class="normal">561</span> +<span class="normal">562</span> +<span class="normal">563</span> +<span class="normal">564</span> +<span class="normal">565</span> +<span class="normal">566</span> +<span class="normal">567</span> +<span class="normal">568</span> +<span class="normal">569</span> +<span class="normal">570</span> +<span class="normal">571</span> +<span class="normal">572</span> +<span class="normal">573</span> +<span class="normal">574</span> +<span class="normal">575</span> +<span class="normal">576</span> +<span class="normal">577</span> +<span class="normal">578</span> +<span class="normal">579</span> +<span class="normal">580</span> +<span class="normal">581</span> +<span class="normal">582</span> +<span class="normal">583</span> +<span class="normal">584</span> +<span class="normal">585</span> +<span class="normal">586</span> +<span class="normal">587</span> +<span class="normal">588</span> +<span class="normal">589</span> +<span class="normal">590</span> +<span class="normal">591</span> +<span class="normal">592</span> +<span class="normal">593</span> +<span class="normal">594</span> +<span class="normal">595</span> +<span class="normal">596</span> +<span class="normal">597</span> +<span class="normal">598</span> +<span class="normal">599</span> +<span class="normal">600</span> +<span class="normal">601</span> +<span class="normal">602</span> +<span class="normal">603</span> +<span class="normal">604</span> +<span class="normal">605</span> +<span class="normal">606</span> +<span class="normal">607</span> +<span class="normal">608</span> +<span class="normal">609</span> +<span class="normal">610</span> +<span class="normal">611</span> +<span class="normal">612</span> +<span class="normal">613</span> +<span class="normal">614</span> +<span class="normal">615</span> +<span class="normal">616</span> +<span class="normal">617</span> +<span class="normal">618</span> +<span class="normal">619</span> +<span class="normal">620</span> +<span class="normal">621</span> +<span class="normal">622</span> +<span class="normal">623</span> +<span class="normal">624</span> +<span class="normal">625</span> +<span class="normal">626</span> +<span class="normal">627</span> +<span class="normal">628</span> +<span class="normal">629</span> +<span class="normal">630</span> +<span class="normal">631</span> +<span class="normal">632</span> +<span class="normal">633</span> +<span class="normal">634</span> +<span class="normal">635</span> +<span class="normal">636</span> +<span class="normal">637</span> +<span class="normal">638</span> +<span class="normal">639</span> +<span class="normal">640</span> +<span class="normal">641</span> +<span class="normal">642</span> +<span class="normal">643</span> +<span class="normal">644</span> +<span class="normal">645</span> +<span class="normal">646</span> +<span class="normal">647</span> +<span class="normal">648</span> +<span class="normal">649</span> +<span class="normal">650</span> +<span class="normal">651</span> +<span class="normal">652</span> +<span class="normal">653</span> +<span class="normal">654</span> +<span class="normal">655</span> +<span class="normal">656</span> +<span class="normal">657</span> +<span class="normal">658</span> +<span class="normal">659</span> +<span class="normal">660</span> +<span class="normal">661</span> +<span class="normal">662</span> +<span class="normal">663</span> +<span class="normal">664</span> +<span class="normal">665</span> +<span class="normal">666</span> +<span class="normal">667</span> +<span class="normal">668</span> +<span class="normal">669</span> +<span class="normal">670</span> +<span class="normal">671</span> +<span class="normal">672</span> +<span class="normal">673</span> +<span class="normal">674</span> +<span class="normal">675</span> +<span class="normal">676</span> +<span class="normal">677</span> +<span class="normal">678</span> +<span class="normal">679</span> +<span class="normal">680</span> +<span class="normal">681</span> +<span class="normal">682</span> +<span class="normal">683</span> +<span class="normal">684</span> +<span class="normal">685</span> +<span class="normal">686</span> +<span class="normal">687</span> +<span class="normal">688</span> +<span class="normal">689</span> +<span class="normal">690</span> +<span class="normal">691</span> +<span class="normal">692</span> +<span class="normal">693</span> +<span class="normal">694</span> +<span class="normal">695</span> +<span class="normal">696</span> +<span class="normal">697</span> +<span class="normal">698</span> +<span class="normal">699</span> +<span class="normal">700</span> +<span class="normal">701</span> +<span class="normal">702</span> +<span class="normal">703</span> +<span class="normal">704</span> +<span class="normal">705</span> +<span class="normal">706</span> +<span class="normal">707</span> +<span class="normal">708</span> +<span class="normal">709</span> +<span class="normal">710</span> +<span class="normal">711</span> +<span class="normal">712</span> +<span class="normal">713</span> +<span class="normal">714</span> +<span class="normal">715</span> +<span class="normal">716</span> +<span class="normal">717</span> +<span class="normal">718</span> +<span class="normal">719</span> +<span class="normal">720</span> +<span class="normal">721</span> +<span class="normal">722</span> +<span class="normal">723</span> +<span class="normal">724</span> +<span class="normal">725</span> +<span class="normal">726</span> +<span class="normal">727</span> +<span class="normal">728</span> +<span class="normal">729</span> +<span class="normal">730</span> +<span class="normal">731</span> +<span class="normal">732</span> +<span class="normal">733</span> +<span class="normal">734</span> +<span class="normal">735</span> +<span class="normal">736</span> +<span class="normal">737</span> +<span class="normal">738</span> +<span class="normal">739</span> +<span class="normal">740</span> +<span class="normal">741</span> +<span class="normal">742</span> +<span class="normal">743</span> +<span class="normal">744</span> +<span class="normal">745</span> +<span class="normal">746</span> +<span class="normal">747</span> +<span class="normal">748</span> +<span class="normal">749</span> +<span class="normal">750</span> +<span class="normal">751</span> +<span class="normal">752</span> +<span class="normal">753</span> +<span class="normal">754</span> +<span class="normal">755</span> +<span class="normal">756</span> +<span class="normal">757</span> +<span class="normal">758</span> +<span class="normal">759</span> +<span class="normal">760</span> +<span class="normal">761</span> +<span class="normal">762</span> +<span class="normal">763</span> +<span class="normal">764</span> +<span class="normal">765</span> +<span class="normal">766</span> +<span class="normal">767</span> +<span class="normal">768</span> +<span class="normal">769</span> +<span class="normal">770</span> +<span class="normal">771</span> +<span class="normal">772</span> +<span class="normal">773</span> +<span class="normal">774</span> +<span class="normal">775</span> +<span class="normal">776</span> +<span class="normal">777</span> +<span class="normal">778</span> +<span class="normal">779</span> +<span class="normal">780</span> +<span class="normal">781</span> +<span class="normal">782</span> +<span class="normal">783</span> +<span class="normal">784</span> +<span class="normal">785</span> +<span class="normal">786</span> +<span class="normal">787</span> +<span class="normal">788</span> +<span class="normal">789</span> +<span class="normal">790</span> +<span class="normal">791</span> +<span class="normal">792</span> +<span class="normal">793</span> +<span class="normal">794</span> +<span class="normal">795</span> +<span class="normal">796</span> +<span class="normal">797</span> +<span class="normal">798</span> +<span class="normal">799</span> +<span class="normal">800</span> +<span class="normal">801</span> +<span class="normal">802</span> +<span class="normal">803</span> +<span class="normal">804</span> +<span class="normal">805</span> +<span class="normal">806</span> +<span class="normal">807</span> +<span class="normal">808</span> +<span class="normal">809</span> +<span class="normal">810</span> +<span class="normal">811</span> +<span class="normal">812</span> +<span class="normal">813</span> +<span class="normal">814</span> +<span class="normal">815</span> +<span class="normal">816</span> +<span class="normal">817</span> +<span class="normal">818</span> +<span class="normal">819</span> +<span class="normal">820</span> +<span class="normal">821</span> +<span class="normal">822</span> +<span class="normal">823</span> +<span class="normal">824</span> +<span class="normal">825</span> +<span class="normal">826</span> +<span class="normal">827</span> +<span class="normal">828</span> +<span class="normal">829</span> +<span class="normal">830</span> +<span class="normal">831</span> +<span class="normal">832</span> +<span class="normal">833</span> +<span class="normal">834</span> +<span class="normal">835</span> +<span class="normal">836</span> +<span class="normal">837</span> +<span class="normal">838</span> +<span class="normal">839</span> +<span class="normal">840</span> +<span class="normal">841</span> +<span class="normal">842</span> +<span class="normal">843</span> +<span class="normal">844</span> +<span class="normal">845</span> +<span class="normal">846</span> +<span class="normal">847</span> +<span class="normal">848</span> +<span class="normal">849</span> +<span class="normal">850</span> +<span class="normal">851</span> +<span class="normal">852</span> +<span class="normal">853</span> +<span class="normal">854</span> +<span class="normal">855</span> +<span class="normal">856</span> +<span class="normal">857</span> +<span class="normal">858</span> +<span class="normal">859</span> +<span class="normal">860</span> +<span class="normal">861</span> +<span class="normal">862</span> +<span class="normal">863</span> +<span class="normal">864</span> +<span class="normal">865</span> +<span class="normal">866</span> +<span class="normal">867</span> +<span class="normal">868</span> +<span class="normal">869</span> +<span class="normal">870</span> +<span class="normal">871</span> +<span class="normal">872</span> +<span class="normal">873</span> +<span class="normal">874</span> +<span class="normal">875</span> +<span class="normal">876</span> +<span class="normal">877</span> +<span class="normal">878</span> +<span class="normal">879</span> +<span class="normal">880</span> +<span class="normal">881</span> +<span class="normal">882</span> +<span class="normal">883</span> +<span class="normal">884</span> +<span class="normal">885</span> +<span class="normal">886</span> +<span class="normal">887</span> +<span class="normal">888</span> +<span class="normal">889</span> +<span class="normal">890</span> +<span class="normal">891</span> +<span class="normal">892</span> +<span class="normal">893</span> +<span class="normal">894</span> +<span class="normal">895</span> +<span class="normal">896</span> +<span class="normal">897</span> +<span class="normal">898</span> +<span class="normal">899</span> +<span class="normal">900</span> +<span class="normal">901</span> +<span class="normal">902</span> +<span class="normal">903</span> +<span class="normal">904</span> +<span class="normal">905</span> +<span class="normal">906</span> +<span class="normal">907</span> +<span class="normal">908</span> +<span class="normal">909</span> +<span class="normal">910</span> +<span class="normal">911</span> +<span class="normal">912</span> +<span class="normal">913</span> +<span class="normal">914</span> +<span class="normal">915</span> +<span class="normal">916</span> +<span class="normal">917</span> +<span class="normal">918</span> +<span class="normal">919</span> +<span class="normal">920</span> +<span class="normal">921</span> +<span class="normal">922</span> +<span class="normal">923</span> +<span class="normal">924</span> +<span class="normal">925</span> +<span class="normal">926</span> +<span class="normal">927</span> +<span class="normal">928</span> +<span class="normal">929</span> +<span class="normal">930</span> +<span class="normal">931</span> +<span class="normal">932</span> +<span class="normal">933</span> +<span class="normal">934</span> +<span class="normal">935</span> +<span class="normal">936</span> +<span class="normal">937</span> +<span class="normal">938</span> +<span class="normal">939</span> +<span class="normal">940</span> +<span class="normal">941</span> +<span class="normal">942</span> +<span class="normal">943</span> +<span class="normal">944</span> +<span class="normal">945</span> +<span class="normal">946</span> +<span class="normal">947</span> +<span class="normal">948</span> +<span class="normal">949</span> +<span class="normal">950</span> +<span class="normal">951</span> +<span class="normal">952</span> +<span class="normal">953</span> +<span class="normal">954</span> +<span class="normal">955</span> +<span class="normal">956</span> +<span class="normal">957</span> +<span class="normal">958</span> +<span class="normal">959</span> +<span class="normal">960</span> +<span class="normal">961</span> +<span class="normal">962</span> +<span class="normal">963</span> +<span class="normal">964</span> +<span class="normal">965</span> +<span class="normal">966</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * caja-dropbox.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Implements the Caja extension API for Dropbox.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><config.h></span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="cp"></span> +<a id="line-26" name="line-26"></a><span class="cp">#endif</span> +<a id="line-27" name="line-27"></a> +<a id="line-28" name="line-28"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span><span class="cp"></span> +<a id="line-29" name="line-29"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a id="line-30" name="line-30"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/un.h></span><span class="cp"></span> +<a id="line-31" name="line-31"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><errno.h></span><span class="cp"></span> +<a id="line-32" name="line-32"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><unistd.h></span><span class="cp"></span> +<a id="line-33" name="line-33"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><ctype.h></span><span class="cp"></span> +<a id="line-34" name="line-34"></a> +<a id="line-35" name="line-35"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="cp"></span> +<a id="line-36" name="line-36"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib/gprintf.h></span><span class="cp"></span> +<a id="line-37" name="line-37"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib-object.h></span><span class="cp"></span> +<a id="line-38" name="line-38"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtk.h></span><span class="cp"></span> +<a id="line-39" name="line-39"></a> +<a id="line-40" name="line-40"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-extension-types.h></span><span class="cp"></span> +<a id="line-41" name="line-41"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-menu-provider.h></span><span class="cp"></span> +<a id="line-42" name="line-42"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="cp"></span> +<a id="line-43" name="line-43"></a> +<a id="line-44" name="line-44"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"g-util.h"</span><span class="cp"></span> +<a id="line-45" name="line-45"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-command-client.h"</span><span class="cp"></span> +<a id="line-46" name="line-46"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox.h"</span><span class="cp"></span> +<a id="line-47" name="line-47"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a id="line-48" name="line-48"></a> +<a id="line-49" name="line-49"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">emblems</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s">"dropbox-uptodate"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-syncing"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-unsyncable"</span><span class="p">};</span><span class="w"></span> +<a id="line-50" name="line-50"></a><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">EMBLEMDIR</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-51" name="line-51"></a> +<a id="line-52" name="line-52"></a><span class="n">gboolean</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span><span class="w"></span> +<a id="line-53" name="line-53"></a> +<a id="line-54" name="line-54"></a><span class="k">static</span><span class="w"> </span><span class="n">GType</span><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-55" name="line-55"></a> +<a id="line-56" name="line-56"></a><span class="cm">/*</span> +<a id="line-57" name="line-57"></a><span class="cm"> Simplifies a path by removing navigation elements such as '.' and '..'</span> +<a id="line-58" name="line-58"></a> +<a id="line-59" name="line-59"></a><span class="cm"> Arguments:</span> +<a id="line-60" name="line-60"></a><span class="cm"> - path: input path to be canonicalized</span> +<a id="line-61" name="line-61"></a> +<a id="line-62" name="line-62"></a><span class="cm"> Returns:</span> +<a id="line-63" name="line-63"></a><span class="cm"> Canonicalized path if input path is valid.</span> +<a id="line-64" name="line-64"></a><span class="cm"> NULL otherwise.</span> +<a id="line-65" name="line-65"></a><span class="cm">*/</span><span class="w"></span> +<a id="line-66" name="line-66"></a><span class="k">static</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="w"></span> +<a id="line-67" name="line-67"></a><span class="nf">canonicalize_path</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-68" name="line-68"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-69" name="line-69"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-70" name="line-70"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">cpy</span><span class="p">,</span><span class="w"> </span><span class="o">**</span><span class="n">elts</span><span class="p">;</span><span class="w"></span> +<a id="line-71" name="line-71"></a> +<a id="line-72" name="line-72"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-73" name="line-73"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">);</span><span class="w"></span> +<a id="line-74" name="line-74"></a> +<a id="line-75" name="line-75"></a><span class="w"> </span><span class="n">elts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="s">"/"</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span> +<a id="line-76" name="line-76"></a><span class="w"> </span><span class="n">cpy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">g_strv_length</span><span class="p">(</span><span class="n">elts</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-77" name="line-77"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"/"</span><span class="p">;</span><span class="w"></span> +<a id="line-78" name="line-78"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-79" name="line-79"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">".."</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-80" name="line-80"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-81" name="line-81"></a><span class="w"> </span><span class="n">j</span><span class="o">--</span><span class="p">;</span><span class="w"></span> +<a id="line-82" name="line-82"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-83" name="line-83"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-84" name="line-84"></a><span class="w"> </span><span class="c1">// Input path has too many parent directory references and is invalid</span> +<a id="line-85" name="line-85"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-86" name="line-86"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span><span class="w"></span> +<a id="line-87" name="line-87"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-88" name="line-88"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-89" name="line-89"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"."</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-90" name="line-90"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">];</span><span class="w"></span> +<a id="line-91" name="line-91"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-92" name="line-92"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-93" name="line-93"></a> +<a id="line-94" name="line-94"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-95" name="line-95"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_build_filenamev</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span><span class="w"></span> +<a id="line-96" name="line-96"></a> +<a id="line-97" name="line-97"></a><span class="nl">exit</span><span class="p">:</span><span class="w"></span> +<a id="line-98" name="line-98"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span><span class="w"></span> +<a id="line-99" name="line-99"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">elts</span><span class="p">);</span><span class="w"></span> +<a id="line-100" name="line-100"></a> +<a id="line-101" name="line-101"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span><span class="w"></span> +<a id="line-102" name="line-102"></a><span class="p">}</span><span class="w"></span> +<a id="line-103" name="line-103"></a> +<a id="line-104" name="line-104"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-105" name="line-105"></a><span class="nf">reset_file</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-106" name="line-106"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"resetting file %p"</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-107" name="line-107"></a><span class="w"> </span><span class="n">caja_file_info_invalidate_extension_info</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-108" name="line-108"></a><span class="p">}</span><span class="w"></span> +<a id="line-109" name="line-109"></a> +<a id="line-110" name="line-110"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span><span class="w"></span> +<a id="line-111" name="line-111"></a><span class="nf">reset_all_files</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-112" name="line-112"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-113" name="line-113"></a> +<a id="line-114" name="line-114"></a><span class="w"> </span><span class="cm">/* this works because you can call a function pointer with</span> +<a id="line-115" name="line-115"></a><span class="cm"> more arguments than it takes */</span><span class="w"></span> +<a id="line-116" name="line-116"></a><span class="w"> </span><span class="n">g_hash_table_foreach</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GHFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_file</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-117" name="line-117"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-118" name="line-118"></a><span class="p">}</span><span class="w"></span> +<a id="line-119" name="line-119"></a> +<a id="line-120" name="line-120"></a> +<a id="line-121" name="line-121"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-122" name="line-122"></a><span class="nf">when_file_dies</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">address</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-123" name="line-123"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-124" name="line-124"></a> +<a id="line-125" name="line-125"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span><span class="w"></span> +<a id="line-126" name="line-126"></a> +<a id="line-127" name="line-127"></a><span class="w"> </span><span class="cm">/* we never got a change to view this file */</span><span class="w"></span> +<a id="line-128" name="line-128"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-129" name="line-129"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-130" name="line-130"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-131" name="line-131"></a> +<a id="line-132" name="line-132"></a><span class="w"> </span><span class="cm">/* too chatty */</span><span class="w"></span> +<a id="line-133" name="line-133"></a><span class="w"> </span><span class="cm">/* debug("removing %s <-> 0x%p", filename, address); */</span><span class="w"></span> +<a id="line-134" name="line-134"></a> +<a id="line-135" name="line-135"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-136" name="line-136"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span><span class="w"></span> +<a id="line-137" name="line-137"></a><span class="p">}</span><span class="w"></span> +<a id="line-138" name="line-138"></a> +<a id="line-139" name="line-139"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-140" name="line-140"></a><span class="nf">changed_cb</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-141" name="line-141"></a><span class="w"> </span><span class="cm">/* check if this file's path has changed, if so update the hash and invalidate</span> +<a id="line-142" name="line-142"></a><span class="cm"> the file */</span><span class="w"></span> +<a id="line-143" name="line-143"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">;</span><span class="w"></span> +<a id="line-144" name="line-144"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename2</span><span class="p">;</span><span class="w"></span> +<a id="line-145" name="line-145"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span><span class="w"></span> +<a id="line-146" name="line-146"></a> +<a id="line-147" name="line-147"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-148" name="line-148"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-149" name="line-149"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-150" name="line-150"></a> +<a id="line-151" name="line-151"></a><span class="w"> </span><span class="cm">/* Canonicalization will only null-out a non-null filename if it is invalid */</span><span class="w"></span> +<a id="line-152" name="line-152"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">((</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">));</span><span class="w"></span> +<a id="line-153" name="line-153"></a> +<a id="line-154" name="line-154"></a><span class="w"> </span><span class="n">filename2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-155" name="line-155"></a> +<a id="line-156" name="line-156"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-157" name="line-157"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-158" name="line-158"></a> +<a id="line-159" name="line-159"></a><span class="w"> </span><span class="cm">/* if filename2 is NULL we've never seen this file in update_file_info */</span><span class="w"></span> +<a id="line-160" name="line-160"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-161" name="line-161"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-162" name="line-162"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-163" name="line-163"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-164" name="line-164"></a> +<a id="line-165" name="line-165"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-166" name="line-166"></a><span class="w"> </span><span class="cm">/* A file has moved to offline storage. Lets remove it from our tables. */</span><span class="w"></span> +<a id="line-167" name="line-167"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-168" name="line-168"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span><span class="w"></span> +<a id="line-169" name="line-169"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-170" name="line-170"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-171" name="line-171"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-172" name="line-172"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-173" name="line-173"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-174" name="line-174"></a> +<a id="line-175" name="line-175"></a><span class="w"> </span><span class="cm">/* this is a hack, because caja doesn't do this for us, for some reason</span> +<a id="line-176" name="line-176"></a><span class="cm"> the file's path has changed */</span><span class="w"></span> +<a id="line-177" name="line-177"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-178" name="line-178"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shifty old: %s, new %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-179" name="line-179"></a> +<a id="line-180" name="line-180"></a><span class="w"> </span><span class="cm">/* gotta do this first, the call after this frees filename2 */</span><span class="w"></span> +<a id="line-181" name="line-181"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span><span class="w"></span> +<a id="line-182" name="line-182"></a> +<a id="line-183" name="line-183"></a><span class="w"> </span><span class="n">g_hash_table_replace</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span><span class="w"></span> +<a id="line-184" name="line-184"></a> +<a id="line-185" name="line-185"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-186" name="line-186"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span><span class="w"></span> +<a id="line-187" name="line-187"></a><span class="w"> </span><span class="cm">/* we shouldn't have another mapping from filename to an object */</span><span class="w"></span> +<a id="line-188" name="line-188"></a><span class="w"> </span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-189" name="line-189"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">f2</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-190" name="line-190"></a><span class="w"> </span><span class="cm">/* lets fix it if it's true, just remove the mapping */</span><span class="w"></span> +<a id="line-191" name="line-191"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-192" name="line-192"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span><span class="w"></span> +<a id="line-193" name="line-193"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-194" name="line-194"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-195" name="line-195"></a> +<a id="line-196" name="line-196"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-197" name="line-197"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-198" name="line-198"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-199" name="line-199"></a> +<a id="line-200" name="line-200"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-201" name="line-201"></a><span class="p">}</span><span class="w"></span> +<a id="line-202" name="line-202"></a> +<a id="line-203" name="line-203"></a><span class="k">static</span><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"></span> +<a id="line-204" name="line-204"></a><span class="nf">caja_dropbox_update_file_info</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-205" name="line-205"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"></span> +<a id="line-206" name="line-206"></a><span class="w"> </span><span class="n">GClosure</span><span class="w"> </span><span class="o">*</span><span class="n">update_complete</span><span class="p">,</span><span class="w"></span> +<a id="line-207" name="line-207"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">**</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-208" name="line-208"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">;</span><span class="w"></span> +<a id="line-209" name="line-209"></a> +<a id="line-210" name="line-210"></a><span class="w"> </span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-211" name="line-211"></a> +<a id="line-212" name="line-212"></a><span class="w"> </span><span class="cm">/* this code adds this file object to our two-way hash of file objects</span> +<a id="line-213" name="line-213"></a><span class="cm"> so we can shell touch these files later */</span><span class="w"></span> +<a id="line-214" name="line-214"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-215" name="line-215"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span><span class="w"></span> +<a id="line-216" name="line-216"></a> +<a id="line-217" name="line-217"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-218" name="line-218"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-219" name="line-219"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-220" name="line-220"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-221" name="line-221"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-222" name="line-222"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-223" name="line-223"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-224" name="line-224"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-225" name="line-225"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">stored_filename</span><span class="p">;</span><span class="w"></span> +<a id="line-226" name="line-226"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-227" name="line-227"></a> +<a id="line-228" name="line-228"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-229" name="line-229"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-230" name="line-230"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-231" name="line-231"></a><span class="w"> </span><span class="cm">/* pfilename path was invalid if canonicalize operation nulled it out */</span><span class="w"></span> +<a id="line-232" name="line-232"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span><span class="w"></span> +<a id="line-233" name="line-233"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-234" name="line-234"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-235" name="line-235"></a> +<a id="line-236" name="line-236"></a><span class="w"> </span><span class="cm">/* don't worry about the dup checks, gcc is smart enough to optimize this</span> +<a id="line-237" name="line-237"></a><span class="cm"> GCSE ftw */</span><span class="w"></span> +<a id="line-238" name="line-238"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">strcmp</span><span class="p">(</span><span class="n">stored_filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-239" name="line-239"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-240" name="line-240"></a> +<a id="line-241" name="line-241"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-242" name="line-242"></a><span class="w"> </span><span class="cm">/* this happens when the filename changes name on a file obj</span> +<a id="line-243" name="line-243"></a><span class="cm"> but changed_cb isn't called */</span><span class="w"></span> +<a id="line-244" name="line-244"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-245" name="line-245"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-246" name="line-246"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">stored_filename</span><span class="p">);</span><span class="w"></span> +<a id="line-247" name="line-247"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-248" name="line-248"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-249" name="line-249"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-250" name="line-250"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span><span class="w"></span> +<a id="line-251" name="line-251"></a> +<a id="line-252" name="line-252"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-253" name="line-253"></a><span class="w"> </span><span class="cm">/* if the filename exists in the filename2obj hash</span> +<a id="line-254" name="line-254"></a><span class="cm"> but the file obj doesn't exist in the obj2filename hash:</span> +<a id="line-255" name="line-255"></a> +<a id="line-256" name="line-256"></a><span class="cm"> this happens when caja allocates another file object</span> +<a id="line-257" name="line-257"></a><span class="cm"> for a filename without first deleting the original file object</span> +<a id="line-258" name="line-258"></a> +<a id="line-259" name="line-259"></a><span class="cm"> just remove the association to the older file object, it's obsolete</span> +<a id="line-260" name="line-260"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-261" name="line-261"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">f2</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-262" name="line-262"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">f2</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-263" name="line-263"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-264" name="line-264"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span><span class="w"></span> +<a id="line-265" name="line-265"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-266" name="line-266"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-267" name="line-267"></a> +<a id="line-268" name="line-268"></a><span class="w"> </span><span class="cm">/* too chatty */</span><span class="w"></span> +<a id="line-269" name="line-269"></a><span class="w"> </span><span class="cm">/* debug("adding %s <-> 0x%p", filename, file);*/</span><span class="w"></span> +<a id="line-270" name="line-270"></a><span class="w"> </span><span class="n">g_object_weak_ref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-271" name="line-271"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-272" name="line-272"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span><span class="w"></span> +<a id="line-273" name="line-273"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"changed"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-274" name="line-274"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-275" name="line-275"></a> +<a id="line-276" name="line-276"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-277" name="line-277"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-278" name="line-278"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-279" name="line-279"></a> +<a id="line-280" name="line-280"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">))</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-281" name="line-281"></a><span class="w"> </span><span class="n">caja_file_info_is_gone</span><span class="p">(</span><span class="n">file</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-282" name="line-282"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-283" name="line-283"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-284" name="line-284"></a> +<a id="line-285" name="line-285"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-286" name="line-286"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-287" name="line-287"></a> +<a id="line-288" name="line-288"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-289" name="line-289"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">provider</span><span class="p">;</span><span class="w"></span> +<a id="line-290" name="line-290"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GET_FILE_INFO</span><span class="p">;</span><span class="w"></span> +<a id="line-291" name="line-291"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_closure_ref</span><span class="p">(</span><span class="n">update_complete</span><span class="p">);</span><span class="w"></span> +<a id="line-292" name="line-292"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_ref</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-293" name="line-293"></a> +<a id="line-294" name="line-294"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">);</span><span class="w"></span> +<a id="line-295" name="line-295"></a> +<a id="line-296" name="line-296"></a><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">;</span><span class="w"></span> +<a id="line-297" name="line-297"></a> +<a id="line-298" name="line-298"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="w"></span> +<a id="line-299" name="line-299"></a><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="w"></span> +<a id="line-300" name="line-300"></a><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">CAJA_OPERATION_IN_PROGRESS</span><span class="p">;</span><span class="w"></span> +<a id="line-301" name="line-301"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-302" name="line-302"></a><span class="p">}</span><span class="w"></span> +<a id="line-303" name="line-303"></a> +<a id="line-304" name="line-304"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-305" name="line-305"></a><span class="nf">handle_shell_touch</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-306" name="line-306"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">path</span><span class="p">;</span><span class="w"></span> +<a id="line-307" name="line-307"></a> +<a id="line-308" name="line-308"></a><span class="w"> </span><span class="c1">// debug_enter();</span> +<a id="line-309" name="line-309"></a> +<a id="line-310" name="line-310"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-311" name="line-311"></a><span class="w"> </span><span class="n">path</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="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-312" name="line-312"></a><span class="hll"><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">;</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'file' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-313" name="line-313"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-314" name="line-314"></a> +<a id="line-315" name="line-315"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span><span class="w"></span> +<a id="line-316" name="line-316"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-317" name="line-317"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shell touch for %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-318" name="line-318"></a> +<a id="line-319" name="line-319"></a><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-320" name="line-320"></a> +<a id="line-321" name="line-321"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-322" name="line-322"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"gonna reset %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-323" name="line-323"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-324" name="line-324"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-325" name="line-325"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-326" name="line-326"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-327" name="line-327"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-328" name="line-328"></a> +<a id="line-329" name="line-329"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-330" name="line-330"></a><span class="p">}</span><span class="w"></span> +<a id="line-331" name="line-331"></a> +<a id="line-332" name="line-332"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-333" name="line-333"></a><span class="nf">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dficr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-334" name="line-334"></a> +<a id="line-335" name="line-335"></a><span class="w"> </span><span class="c1">//debug_enter();</span> +<a id="line-336" name="line-336"></a><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span><span class="w"></span> +<a id="line-337" name="line-337"></a> +<a id="line-338" name="line-338"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-339" name="line-339"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-340" name="line-340"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">isdir</span><span class="p">;</span><span class="w"></span> +<a id="line-341" name="line-341"></a> +<a id="line-342" name="line-342"></a><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">;</span><span class="w"></span> +<a id="line-343" name="line-343"></a> +<a id="line-344" name="line-344"></a><span class="w"> </span><span class="cm">/* if we have emblems just use them. */</span><span class="w"></span> +<a id="line-345" name="line-345"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-346" name="line-346"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">"emblems"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-347" name="line-347"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-348" name="line-348"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-349" name="line-349"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"></span> +<a id="line-350" name="line-350"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-351" name="line-351"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-352" name="line-352"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-353" name="line-353"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-354" name="line-354"></a><span class="w"> </span><span class="cm">/* if the file status command went okay */</span><span class="w"></span> +<a id="line-355" name="line-355"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-356" name="line-356"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"></span> +<a id="line-357" name="line-357"></a><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">"status"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-358" name="line-358"></a><span class="w"> </span><span class="p">((</span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">TRUE</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-359" name="line-359"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-360" name="line-360"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-361" name="line-361"></a> +<a id="line-362" name="line-362"></a><span class="w"> </span><span class="cm">/* set the tag emblem */</span><span class="w"></span> +<a id="line-363" name="line-363"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">isdir</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-364" name="line-364"></a><span class="w"> </span><span class="p">(</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">"tag"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-365" name="line-365"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-366" name="line-366"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"web"</span><span class="p">);</span><span class="w"></span> +<a id="line-367" name="line-367"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-368" name="line-368"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"shared"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-369" name="line-369"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"people"</span><span class="p">);</span><span class="w"></span> +<a id="line-370" name="line-370"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-371" name="line-371"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"photos"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-372" name="line-372"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"photos"</span><span class="p">);</span><span class="w"></span> +<a id="line-373" name="line-373"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-374" name="line-374"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"sandbox"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-375" name="line-375"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"star"</span><span class="p">);</span><span class="w"></span> +<a id="line-376" name="line-376"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-377" name="line-377"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-378" name="line-378"></a> +<a id="line-379" name="line-379"></a><span class="w"> </span><span class="cm">/* set the status emblem */</span><span class="w"></span> +<a id="line-380" name="line-380"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-381" name="line-381"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-382" name="line-382"></a> +<a id="line-383" name="line-383"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"up to date"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-384" name="line-384"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"></span> +<a id="line-385" name="line-385"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-386" name="line-386"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"syncing"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-387" name="line-387"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"></span> +<a id="line-388" name="line-388"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-389" name="line-389"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"unsyncable"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-390" name="line-390"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"></span> +<a id="line-391" name="line-391"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-392" name="line-392"></a> +<a id="line-393" name="line-393"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_code</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-394" name="line-394"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-395" name="line-395"></a><span class="cm"> debug("%s to %s", emblems[emblem_code-1],</span> +<a id="line-396" name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr->dfic->file),</span> +<a id="line-397" name="line-397"></a><span class="cm"> NULL, NULL));</span> +<a id="line-398" name="line-398"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-399" name="line-399"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">emblems</span><span class="p">[</span><span class="n">emblem_code</span><span class="mi">-1</span><span class="p">]);</span><span class="w"></span> +<a id="line-400" name="line-400"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-401" name="line-401"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-402" name="line-402"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-403" name="line-403"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-404" name="line-404"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-405" name="line-405"></a> +<a id="line-406" name="line-406"></a><span class="w"> </span><span class="cm">/* complete the info request */</span><span class="w"></span> +<a id="line-407" name="line-407"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-408" name="line-408"></a><span class="w"> </span><span class="n">caja_info_provider_update_complete_invoke</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">,</span><span class="w"></span> +<a id="line-409" name="line-409"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-410" name="line-410"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">,</span><span class="w"></span> +<a id="line-411" name="line-411"></a><span class="w"> </span><span class="n">result</span><span class="p">);</span><span class="w"></span> +<a id="line-412" name="line-412"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-413" name="line-413"></a> +<a id="line-414" name="line-414"></a><span class="w"> </span><span class="cm">/* destroy the objects we created */</span><span class="w"></span> +<a id="line-415" name="line-415"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-416" name="line-416"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">);</span><span class="w"></span> +<a id="line-417" name="line-417"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-418" name="line-418"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">);</span><span class="w"></span> +<a id="line-419" name="line-419"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-420" name="line-420"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">);</span><span class="w"></span> +<a id="line-421" name="line-421"></a> +<a id="line-422" name="line-422"></a><span class="w"> </span><span class="cm">/* unref the objects we didn't create */</span><span class="w"></span> +<a id="line-423" name="line-423"></a><span class="w"> </span><span class="n">g_closure_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">);</span><span class="w"></span> +<a id="line-424" name="line-424"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-425" name="line-425"></a> +<a id="line-426" name="line-426"></a><span class="w"> </span><span class="cm">/* now free the structs */</span><span class="w"></span> +<a id="line-427" name="line-427"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">);</span><span class="w"></span> +<a id="line-428" name="line-428"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="p">);</span><span class="w"></span> +<a id="line-429" name="line-429"></a> +<a id="line-430" name="line-430"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-431" name="line-431"></a><span class="p">}</span><span class="w"></span> +<a id="line-432" name="line-432"></a> +<a id="line-433" name="line-433"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-434" name="line-434"></a><span class="nf">caja_dropbox_cancel_update</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-435" name="line-435"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-436" name="line-436"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">handle</span><span class="p">;</span><span class="w"></span> +<a id="line-437" name="line-437"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-438" name="line-438"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-439" name="line-439"></a><span class="p">}</span><span class="w"></span> +<a id="line-440" name="line-440"></a> +<a id="line-441" name="line-441"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-442" name="line-442"></a><span class="nf">menu_item_cb</span><span class="p">(</span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">,</span><span class="w"></span> +<a id="line-443" name="line-443"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-444" name="line-444"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">verb</span><span class="p">;</span><span class="w"></span> +<a id="line-445" name="line-445"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">;</span><span class="w"></span> +<a id="line-446" name="line-446"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dcac</span><span class="p">;</span><span class="w"></span> +<a id="line-447" name="line-447"></a> +<a id="line-448" name="line-448"></a><span class="w"> </span><span class="n">dcac</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-449" name="line-449"></a> +<a id="line-450" name="line-450"></a><span class="w"> </span><span class="cm">/* maybe these would be better passed in a container</span> +<a id="line-451" name="line-451"></a><span class="cm"> struct used as the userdata pointer, oh well this</span> +<a id="line-452" name="line-452"></a><span class="cm"> is how dave camp does it */</span><span class="w"></span> +<a id="line-453" name="line-453"></a><span class="w"> </span><span class="n">files</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">);</span><span class="w"></span> +<a id="line-454" name="line-454"></a><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">);</span><span class="w"></span> +<a id="line-455" name="line-455"></a> +<a id="line-456" name="line-456"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span><span class="w"></span> +<a id="line-457" name="line-457"></a> +<a id="line-458" name="line-458"></a><span class="w"> </span><span class="cm">/* build the argument list */</span><span class="w"></span> +<a id="line-459" name="line-459"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-460" name="line-460"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-461" name="line-461"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-462" name="line-462"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span><span class="w"></span> +<a id="line-463" name="line-463"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-464" name="line-464"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span><span class="w"></span> +<a id="line-465" name="line-465"></a><span class="w"> </span><span class="n">guint</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-466" name="line-466"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">li</span><span class="p">;</span><span class="w"></span> +<a id="line-467" name="line-467"></a> +<a id="line-468" name="line-468"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-469" name="line-469"></a> +<a id="line-470" name="line-470"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-471" name="line-471"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">CAJA_FILE_INFO</span><span class="p">(</span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">));</span><span class="w"></span> +<a id="line-472" name="line-472"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-473" name="line-473"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-474" name="line-474"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">path</span><span class="p">)</span><span class="w"></span> +<a id="line-475" name="line-475"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"></span> +<a id="line-476" name="line-476"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">path</span><span class="p">;</span><span class="w"></span> +<a id="line-477" name="line-477"></a><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-478" name="line-478"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-479" name="line-479"></a> +<a id="line-480" name="line-480"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"></span> +<a id="line-481" name="line-481"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"></span> +<a id="line-482" name="line-482"></a><span class="w"> </span><span class="n">arglist</span><span class="p">);</span><span class="w"></span> +<a id="line-483" name="line-483"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-484" name="line-484"></a> +<a id="line-485" name="line-485"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-486" name="line-486"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span><span class="w"></span> +<a id="line-487" name="line-487"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w"></span> +<a id="line-488" name="line-488"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">);</span><span class="w"></span> +<a id="line-489" name="line-489"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-490" name="line-490"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"verb"</span><span class="p">),</span><span class="w"> </span><span class="n">arglist</span><span class="p">);</span><span class="w"></span> +<a id="line-491" name="line-491"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-492" name="line-492"></a> +<a id="line-493" name="line-493"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_action"</span><span class="p">);</span><span class="w"></span> +<a id="line-494" name="line-494"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-495" name="line-495"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-496" name="line-496"></a> +<a id="line-497" name="line-497"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dcac</span><span class="p">);</span><span class="w"></span> +<a id="line-498" name="line-498"></a><span class="p">}</span><span class="w"></span> +<a id="line-499" name="line-499"></a> +<a id="line-500" name="line-500"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="nf">from_hex</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-501" name="line-501"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">isdigit</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">ch</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'0'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">tolower</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'a'</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"></span> +<a id="line-502" name="line-502"></a><span class="p">}</span><span class="w"></span> +<a id="line-503" name="line-503"></a> +<a id="line-504" name="line-504"></a><span class="c1">// decode in --> out, but dont fill more than n chars into out</span> +<a id="line-505" name="line-505"></a><span class="c1">// returns len of out if thing went well, -1 if n wasn't big enough</span> +<a id="line-506" name="line-506"></a><span class="c1">// can be used in place (whoa!)</span> +<a id="line-507" name="line-507"></a><span class="kt">int</span><span class="w"> </span><span class="nf">GhettoURLDecode</span><span class="p">(</span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-508" name="line-508"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">out_initial</span><span class="p">;</span><span class="w"></span> +<a id="line-509" name="line-509"></a> +<a id="line-510" name="line-510"></a><span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="n">out_initial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">out</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-511" name="line-511"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'%'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-512" name="line-512"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-513" name="line-513"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span><span class="w"></span> +<a id="line-514" name="line-514"></a><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"></span> +<a id="line-515" name="line-515"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-516" name="line-516"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-517" name="line-517"></a><span class="w"> </span><span class="c1">// Input string isn't well-formed</span> +<a id="line-518" name="line-518"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span> +<a id="line-519" name="line-519"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-520" name="line-520"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-521" name="line-521"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-522" name="line-522"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="p">;</span><span class="w"></span> +<a id="line-523" name="line-523"></a><span class="w"> </span><span class="n">in</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-524" name="line-524"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-525" name="line-525"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-526" name="line-526"></a> +<a id="line-527" name="line-527"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-528" name="line-528"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"></span> +<a id="line-529" name="line-529"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="p">;</span><span class="w"></span> +<a id="line-530" name="line-530"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-531" name="line-531"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span> +<a id="line-532" name="line-532"></a><span class="p">}</span><span class="w"></span> +<a id="line-533" name="line-533"></a> +<a id="line-534" name="line-534"></a><span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"></span> +<a id="line-535" name="line-535"></a><span class="nf">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">,</span><span class="w"></span> +<a id="line-536" name="line-536"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">menu</span><span class="p">,</span><span class="w"></span> +<a id="line-537" name="line-537"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">old_action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-538" name="line-538"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="p">,</span><span class="w"></span> +<a id="line-539" name="line-539"></a><span class="w"> </span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-540" name="line-540"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span><span class="w"></span> +<a id="line-541" name="line-541"></a><span class="p">{</span><span class="w"></span> +<a id="line-542" name="line-542"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-543" name="line-543"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-544" name="line-544"></a> +<a id="line-545" name="line-545"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-546" name="line-546"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">option_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"~"</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span><span class="w"></span> +<a id="line-547" name="line-547"></a><span class="w"> </span><span class="cm">/* if this is a valid string */</span><span class="w"></span> +<a id="line-548" name="line-548"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-549" name="line-549"></a><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-550" name="line-550"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span><span class="w"></span> +<a id="line-551" name="line-551"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"></span> +<a id="line-552" name="line-552"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-553" name="line-553"></a> +<a id="line-554" name="line-554"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"></span> +<a id="line-555" name="line-555"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_inner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span><span class="w"></span> +<a id="line-556" name="line-556"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span><span class="w"></span> +<a id="line-557" name="line-557"></a> +<a id="line-558" name="line-558"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_name</span><span class="p">));</span><span class="w"></span> +<a id="line-559" name="line-559"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">verb</span><span class="p">));</span><span class="w"></span> +<a id="line-560" name="line-560"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_inner</span><span class="p">));</span><span class="w"></span> +<a id="line-561" name="line-561"></a> +<a id="line-562" name="line-562"></a><span class="w"> </span><span class="c1">// If the inner section has a menu in it then we create a submenu. The verb will be ignored.</span> +<a id="line-563" name="line-563"></a><span class="w"> </span><span class="c1">// Otherwise add the verb to our map and add the menu item to the list.</span> +<a id="line-564" name="line-564"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="sc">'~'</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-565" name="line-565"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span><span class="w"></span> +<a id="line-566" name="line-566"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">suboptions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="s">"|"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span><span class="w"></span> +<a id="line-567" name="line-567"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span><span class="w"></span> +<a id="line-568" name="line-568"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">submenu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span><span class="w"></span> +<a id="line-569" name="line-569"></a> +<a id="line-570" name="line-570"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">);</span><span class="w"></span> +<a id="line-571" name="line-571"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="s">"::"</span><span class="p">);</span><span class="w"></span> +<a id="line-572" name="line-572"></a> +<a id="line-573" name="line-573"></a><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">suboptions</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">,</span><span class="w"> </span><span class="n">new_action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-574" name="line-574"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">);</span><span class="w"></span> +<a id="line-575" name="line-575"></a> +<a id="line-576" name="line-576"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"></span> +<a id="line-577" name="line-577"></a><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="s">""</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-578" name="line-578"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">);</span><span class="w"></span> +<a id="line-579" name="line-579"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-580" name="line-580"></a> +<a id="line-581" name="line-581"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">suboptions</span><span class="p">);</span><span class="w"></span> +<a id="line-582" name="line-582"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-583" name="line-583"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">submenu</span><span class="p">);</span><span class="w"></span> +<a id="line-584" name="line-584"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-585" name="line-585"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-586" name="line-586"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span><span class="w"></span> +<a id="line-587" name="line-587"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span><span class="w"></span> +<a id="line-588" name="line-588"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-589" name="line-589"></a> +<a id="line-590" name="line-590"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">);</span><span class="w"></span> +<a id="line-591" name="line-591"></a> +<a id="line-592" name="line-592"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">item_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'!'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-593" name="line-593"></a><span class="w"> </span><span class="n">item_name</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-594" name="line-594"></a><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-595" name="line-595"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-596" name="line-596"></a> +<a id="line-597" name="line-597"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-598" name="line-598"></a> +<a id="line-599" name="line-599"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-600" name="line-600"></a><span class="w"> </span><span class="cm">/* add the file metadata to this item */</span><span class="w"></span> +<a id="line-601" name="line-601"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">,</span><span class="w"></span> +<a id="line-602" name="line-602"></a><span class="w"> </span><span class="n">caja_file_info_list_copy</span><span class="w"> </span><span class="p">(</span><span class="n">files</span><span class="p">),</span><span class="w"></span> +<a id="line-603" name="line-603"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">caja_file_info_list_free</span><span class="p">);</span><span class="w"></span> +<a id="line-604" name="line-604"></a><span class="w"> </span><span class="cm">/* add the verb metadata */</span><span class="w"></span> +<a id="line-605" name="line-605"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">,</span><span class="w"></span> +<a id="line-606" name="line-606"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">),</span><span class="w"></span> +<a id="line-607" name="line-607"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span><span class="w"></span> +<a id="line-608" name="line-608"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="w"> </span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="s">"activate"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="w"> </span><span class="p">(</span><span class="n">menu_item_cb</span><span class="p">),</span><span class="w"> </span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-609" name="line-609"></a> +<a id="line-610" name="line-610"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">grayed_out</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-611" name="line-611"></a><span class="w"> </span><span class="n">GValue</span><span class="w"> </span><span class="n">sensitive</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-612" name="line-612"></a><span class="w"> </span><span class="n">g_value_init</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">G_TYPE_BOOLEAN</span><span class="p">);</span><span class="w"></span> +<a id="line-613" name="line-613"></a><span class="w"> </span><span class="n">g_value_set_boolean</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span><span class="w"></span> +<a id="line-614" name="line-614"></a><span class="w"> </span><span class="n">g_object_set_property</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"sensitive"</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">sensitive</span><span class="p">);</span><span class="w"></span> +<a id="line-615" name="line-615"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-616" name="line-616"></a> +<a id="line-617" name="line-617"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-618" name="line-618"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-619" name="line-619"></a><span class="w"> </span><span class="n">ret</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-620" name="line-620"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-621" name="line-621"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span><span class="w"></span> +<a id="line-622" name="line-622"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-623" name="line-623"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span><span class="w"></span> +<a id="line-624" name="line-624"></a><span class="p">}</span><span class="w"></span> +<a id="line-625" name="line-625"></a> +<a id="line-626" name="line-626"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-627" name="line-627"></a><span class="nf">get_file_items_callback</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"></span> +<a id="line-628" name="line-628"></a><span class="p">{</span><span class="w"></span> +<a id="line-629" name="line-629"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span><span class="w"></span> +<a id="line-630" name="line-630"></a> +<a id="line-631" name="line-631"></a><span class="w"> </span><span class="cm">/* queue_push doesn't accept NULL as a value so we create an empty hash table</span> +<a id="line-632" name="line-632"></a><span class="cm"> * if we got no response. */</span><span class="w"></span> +<a id="line-633" name="line-633"></a><span class="w"> </span><span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">response</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"></span> +<a id="line-634" name="line-634"></a><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">));</span><span class="w"></span> +<a id="line-635" name="line-635"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-636" name="line-636"></a><span class="p">}</span><span class="w"></span> +<a id="line-637" name="line-637"></a> +<a id="line-638" name="line-638"></a> +<a id="line-639" name="line-639"></a><span class="k">static</span><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="w"></span> +<a id="line-640" name="line-640"></a><span class="nf">caja_dropbox_get_file_items</span><span class="p">(</span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-641" name="line-641"></a><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">window</span><span class="p">,</span><span class="w"></span> +<a id="line-642" name="line-642"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span><span class="w"></span> +<a id="line-643" name="line-643"></a><span class="p">{</span><span class="w"></span> +<a id="line-644" name="line-644"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-645" name="line-645"></a><span class="cm"> * 1. Convert files to filenames.</span> +<a id="line-646" name="line-646"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-647" name="line-647"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">);</span><span class="w"></span> +<a id="line-648" name="line-648"></a> +<a id="line-649" name="line-649"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file_count</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"></span> +<a id="line-650" name="line-650"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-651" name="line-651"></a> +<a id="line-652" name="line-652"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-653" name="line-653"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-654" name="line-654"></a><span class="w"> </span><span class="n">GList</span><span class="o">*</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"></span> +<a id="line-655" name="line-655"></a> +<a id="line-656" name="line-656"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elem</span><span class="o">-></span><span class="n">next</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-657" name="line-657"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">elem</span><span class="o">-></span><span class="n">data</span><span class="p">);</span><span class="w"></span> +<a id="line-658" name="line-658"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename_un</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-659" name="line-659"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename_un</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-660" name="line-660"></a> +<a id="line-661" name="line-661"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-662" name="line-662"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span><span class="w"></span> +<a id="line-663" name="line-663"></a> +<a id="line-664" name="line-664"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-665" name="line-665"></a><span class="w"> </span><span class="cm">/* oooh, filename wasn't correctly encoded, or isn't a local file. */</span><span class="w"></span> +<a id="line-666" name="line-666"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-667" name="line-667"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-668" name="line-668"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-669" name="line-669"></a> +<a id="line-670" name="line-670"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-671" name="line-671"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-672" name="line-672"></a> +<a id="line-673" name="line-673"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_new_full</span><span class="p">((</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="n">g_hash_table_unref</span><span class="p">);</span><span class="w"></span> +<a id="line-674" name="line-674"></a> +<a id="line-675" name="line-675"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-676" name="line-676"></a><span class="cm"> * 2. Create a DropboxGeneralCommand to call "icon_overlay_context_options"</span> +<a id="line-677" name="line-677"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-678" name="line-678"></a> +<a id="line-679" name="line-679"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-680" name="line-680"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span><span class="w"></span> +<a id="line-681" name="line-681"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_options"</span><span class="p">);</span><span class="w"></span> +<a id="line-682" name="line-682"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-683" name="line-683"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-684" name="line-684"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-685" name="line-685"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span><span class="w"></span> +<a id="line-686" name="line-686"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"> </span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-687" name="line-687"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">get_file_items_callback</span><span class="p">;</span><span class="w"></span> +<a id="line-688" name="line-688"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_ref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-689" name="line-689"></a> +<a id="line-690" name="line-690"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-691" name="line-691"></a><span class="cm"> * 3. Queue it up for the helper thread to run it.</span> +<a id="line-692" name="line-692"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-693" name="line-693"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-694" name="line-694"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dgc</span><span class="p">);</span><span class="w"></span> +<a id="line-695" name="line-695"></a> +<a id="line-696" name="line-696"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-697" name="line-697"></a><span class="cm"> * 4. We have to block until it's done because caja expects a reply. But we will</span> +<a id="line-698" name="line-698"></a><span class="cm"> * only block for 50 ms for a reply.</span> +<a id="line-699" name="line-699"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-700" name="line-700"></a> +<a id="line-701" name="line-701"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">context_options_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="mi">50000</span><span class="p">);</span><span class="w"></span> +<a id="line-702" name="line-702"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-703" name="line-703"></a> +<a id="line-704" name="line-704"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">context_options_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-705" name="line-705"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-706" name="line-706"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-707" name="line-707"></a> +<a id="line-708" name="line-708"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-709" name="line-709"></a><span class="cm"> * 5. Parse the reply.</span> +<a id="line-710" name="line-710"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-711" name="line-711"></a> +<a id="line-712" name="line-712"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">,</span><span class="w"> </span><span class="s">"options"</span><span class="p">);</span><span class="w"></span> +<a id="line-713" name="line-713"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-714" name="line-714"></a> +<a id="line-715" name="line-715"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-716" name="line-716"></a><span class="w"> </span><span class="cm">/* build the menu */</span><span class="w"></span> +<a id="line-717" name="line-717"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">root_item</span><span class="p">;</span><span class="w"></span> +<a id="line-718" name="line-718"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">root_menu</span><span class="p">;</span><span class="w"></span> +<a id="line-719" name="line-719"></a> +<a id="line-720" name="line-720"></a><span class="w"> </span><span class="n">root_menu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span><span class="w"></span> +<a id="line-721" name="line-721"></a><span class="w"> </span><span class="n">root_item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="s">"CajaDropbox::root_item"</span><span class="p">,</span><span class="w"></span> +<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">"Dropbox"</span><span class="p">,</span><span class="w"> </span><span class="s">"Dropbox Options"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox"</span><span class="p">);</span><span class="w"></span> +<a id="line-723" name="line-723"></a> +<a id="line-724" name="line-724"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_append</span><span class="p">(</span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">root_item</span><span class="p">);</span><span class="w"></span> +<a id="line-725" name="line-725"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="s">"CajaDropbox::"</span><span class="p">);</span><span class="w"></span> +<a id="line-726" name="line-726"></a> +<a id="line-727" name="line-727"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">options</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">,</span><span class="w"> </span><span class="n">action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-728" name="line-728"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-729" name="line-729"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">toret</span><span class="p">);</span><span class="w"></span> +<a id="line-730" name="line-730"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-731" name="line-731"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-732" name="line-732"></a> +<a id="line-733" name="line-733"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">root_item</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">);</span><span class="w"></span> +<a id="line-734" name="line-734"></a> +<a id="line-735" name="line-735"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-736" name="line-736"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">root_menu</span><span class="p">);</span><span class="w"></span> +<a id="line-737" name="line-737"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-738" name="line-738"></a> +<a id="line-739" name="line-739"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">);</span><span class="w"></span> +<a id="line-740" name="line-740"></a> +<a id="line-741" name="line-741"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span><span class="w"></span> +<a id="line-742" name="line-742"></a><span class="p">}</span><span class="w"></span> +<a id="line-743" name="line-743"></a> +<a id="line-744" name="line-744"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-745" name="line-745"></a><span class="nf">add_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-746" name="line-746"></a><span class="p">{</span><span class="w"></span> +<a id="line-747" name="line-747"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-748" name="line-748"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-749" name="line-749"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-750" name="line-750"></a> +<a id="line-751" name="line-751"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="p">;</span><span class="w"></span> +<a id="line-752" name="line-752"></a><span class="hll"><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-753" name="line-753"></a> +<a id="line-754" name="line-754"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="n">theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span><span class="w"></span> +<a id="line-755" name="line-755"></a> +<a id="line-756" name="line-756"></a><span class="hll"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">&&</span><span class="w"></span><span class="error2"><--- Condition 'emblem_paths_response' is always true</span> +</span><a id="line-757" name="line-757"></a><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-758" name="line-758"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-759" name="line-759"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"></span> +<a id="line-760" name="line-760"></a><span class="w"> </span><span class="n">gtk_icon_theme_append_search_path</span><span class="p">(</span><span class="n">theme</span><span class="p">,</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-761" name="line-761"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-762" name="line-762"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-763" name="line-763"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-764" name="line-764"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-765" name="line-765"></a><span class="p">}</span><span class="w"></span> +<a id="line-766" name="line-766"></a> +<a id="line-767" name="line-767"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-768" name="line-768"></a><span class="nf">remove_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-769" name="line-769"></a><span class="p">{</span><span class="w"></span> +<a id="line-770" name="line-770"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-771" name="line-771"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-772" name="line-772"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-773" name="line-773"></a> +<a id="line-774" name="line-774"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">);</span><span class="w"></span> +<a id="line-775" name="line-775"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_list</span><span class="p">)</span><span class="w"></span> +<a id="line-776" name="line-776"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span><span class="w"></span> +<a id="line-777" name="line-777"></a> +<a id="line-778" name="line-778"></a><span class="w"> </span><span class="c1">// We need to remove the old paths.</span> +<a id="line-779" name="line-779"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">icon_theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span><span class="w"></span> +<a id="line-780" name="line-780"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="w"> </span><span class="n">paths</span><span class="p">;</span><span class="w"></span> +<a id="line-781" name="line-781"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"></span> +<a id="line-782" name="line-782"></a> +<a id="line-783" name="line-783"></a><span class="w"> </span><span class="n">gtk_icon_theme_get_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">path_count</span><span class="p">);</span><span class="w"></span> +<a id="line-784" name="line-784"></a> +<a id="line-785" name="line-785"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-786" name="line-786"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-787" name="line-787"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-788" name="line-788"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-789" name="line-789"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-790" name="line-790"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-791" name="line-791"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">g_strcmp0</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-792" name="line-792"></a><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-793" name="line-793"></a><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-794" name="line-794"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-795" name="line-795"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span><span class="w"></span> +<a id="line-796" name="line-796"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-797" name="line-797"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-798" name="line-798"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-799" name="line-799"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keep</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-800" name="line-800"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">];</span><span class="w"></span> +<a id="line-801" name="line-801"></a><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-802" name="line-802"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-803" name="line-803"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-804" name="line-804"></a> +<a id="line-805" name="line-805"></a><span class="w"> </span><span class="cm">/* If we found one we need to reset the path to</span> +<a id="line-806" name="line-806"></a><span class="cm"> accomodate the changes */</span><span class="w"></span> +<a id="line-807" name="line-807"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">found</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-808" name="line-808"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Clear the last one */</span><span class="w"></span> +<a id="line-809" name="line-809"></a><span class="w"> </span><span class="n">gtk_icon_theme_set_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="p">)</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="p">);</span><span class="w"></span> +<a id="line-810" name="line-810"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-811" name="line-811"></a> +<a id="line-812" name="line-812"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-813" name="line-813"></a><span class="nl">exit</span><span class="p">:</span><span class="w"></span> +<a id="line-814" name="line-814"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-815" name="line-815"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-816" name="line-816"></a><span class="p">}</span><span class="w"></span> +<a id="line-817" name="line-817"></a> +<a id="line-818" name="line-818"></a><span class="kt">void</span><span class="w"> </span><span class="nf">get_emblem_paths_cb</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"></span> +<a id="line-819" name="line-819"></a><span class="p">{</span><span class="w"></span> +<a id="line-820" name="line-820"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-821" name="line-821"></a><span class="w"> </span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-822" name="line-822"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">);</span><span class="w"></span> +<a id="line-823" name="line-823"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">,</span><span class="w"> </span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">);</span><span class="w"></span> +<a id="line-824" name="line-824"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-825" name="line-825"></a><span class="w"> </span><span class="cm">/* Increase the ref so that finish_general_command doesn't delete it. */</span><span class="w"></span> +<a id="line-826" name="line-826"></a><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-827" name="line-827"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-828" name="line-828"></a> +<a id="line-829" name="line-829"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-830" name="line-830"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-831" name="line-831"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span><span class="w"></span> +<a id="line-832" name="line-832"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-833" name="line-833"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-834" name="line-834"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">;</span><span class="w"></span> +<a id="line-835" name="line-835"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-836" name="line-836"></a> +<a id="line-837" name="line-837"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">add_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">));</span><span class="w"></span> +<a id="line-838" name="line-838"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_all_files</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-839" name="line-839"></a><span class="p">}</span><span class="w"></span> +<a id="line-840" name="line-840"></a> +<a id="line-841" name="line-841"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-842" name="line-842"></a><span class="nf">on_connect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-843" name="line-843"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-844" name="line-844"></a> +<a id="line-845" name="line-845"></a><span class="w"> </span><span class="n">dropbox_command_client_send_command</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"></span> +<a id="line-846" name="line-846"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)</span><span class="w"> </span><span class="n">get_emblem_paths_cb</span><span class="p">,</span><span class="w"></span> +<a id="line-847" name="line-847"></a><span class="hll"><span class="w"> </span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="s">"get_emblem_paths"</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. <span class="marker">[+]</span></span><div class="content">Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. +The C99 standard, in section 7.15.1.1, states that if the type used by va_arg() is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined. +The value of the NULL macro is an implementation-defined null pointer constant (7.17), which can be any integer constant expression with the value 0, or such an expression casted to (void*) (6.3.2.3). This includes values like 0, 0L, or even 0LL. +In practice on common architectures, this will cause real crashes if sizeof(int) != sizeof(void*), and NULL is defined to 0 or any other null pointer constant that promotes to int. +To reproduce you might be able to use this little code example on 64bit platforms. If the output includes "ERROR", the sentinel had only 4 out of 8 bytes initialized to zero and was not detected as the final argument to stop argument processing via va_arg(). Changing the 0 to (void*)0 or 0L will make the "ERROR" output go away. +#include <stdarg.h> +#include <stdio.h> + +void f(char *s, ...) { + va_list ap; + va_start(ap,s); + for (;;) { + char *p = va_arg(ap,char*); + printf("%018p, %s\n", p, (long)p & 255 ? p : ""); + if(!p) break; + } + va_end(ap); +} + +void g() { + char *s2 = "x"; + char *s3 = "ERROR"; + + // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64 + f("first", s2, s2, s2, s2, s2, 0, s3, (char*)0); +} + +void h() { + int i; + volatile unsigned char a[1000]; + for (i = 0; i<sizeof(a); i++) + a[i] = -1; +} + +int main() { + h(); + g(); + return 0; +}</div></div> +</span><a id="line-848" name="line-848"></a><span class="p">}</span><span class="w"></span> +<a id="line-849" name="line-849"></a> +<a id="line-850" name="line-850"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-851" name="line-851"></a><span class="nf">on_disconnect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-852" name="line-852"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-853" name="line-853"></a> +<a id="line-854" name="line-854"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-855" name="line-855"></a><span class="w"> </span><span class="cm">/* This call will free the data too. */</span><span class="w"></span> +<a id="line-856" name="line-856"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span><span class="w"></span> +<a id="line-857" name="line-857"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-858" name="line-858"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-859" name="line-859"></a><span class="p">}</span><span class="w"></span> +<a id="line-860" name="line-860"></a> +<a id="line-861" name="line-861"></a> +<a id="line-862" name="line-862"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-863" name="line-863"></a><span class="nf">caja_dropbox_menu_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaMenuProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-864" name="line-864"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">get_file_items</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_get_file_items</span><span class="p">;</span><span class="w"></span> +<a id="line-865" name="line-865"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-866" name="line-866"></a><span class="p">}</span><span class="w"></span> +<a id="line-867" name="line-867"></a> +<a id="line-868" name="line-868"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-869" name="line-869"></a><span class="nf">caja_dropbox_info_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaInfoProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-870" name="line-870"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">update_file_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_update_file_info</span><span class="p">;</span><span class="w"></span> +<a id="line-871" name="line-871"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">cancel_update</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_cancel_update</span><span class="p">;</span><span class="w"></span> +<a id="line-872" name="line-872"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-873" name="line-873"></a><span class="p">}</span><span class="w"></span> +<a id="line-874" name="line-874"></a> +<a id="line-875" name="line-875"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-876" name="line-876"></a><span class="nf">caja_dropbox_instance_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-877" name="line-877"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-878" name="line-878"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-879" name="line-879"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-880" name="line-880"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-881" name="line-881"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-882" name="line-882"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-883" name="line-883"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-884" name="line-884"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span><span class="w"></span> +<a id="line-885" name="line-885"></a><span class="w"> </span><span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-886" name="line-886"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-887" name="line-887"></a> +<a id="line-888" name="line-888"></a><span class="w"> </span><span class="cm">/* setup the connection obj*/</span><span class="w"></span> +<a id="line-889" name="line-889"></a><span class="w"> </span><span class="n">dropbox_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span><span class="w"></span> +<a id="line-890" name="line-890"></a> +<a id="line-891" name="line-891"></a><span class="w"> </span><span class="cm">/* our hooks */</span><span class="w"></span> +<a id="line-892" name="line-892"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span><span class="w"> </span><span class="s">"shell_touch"</span><span class="p">,</span><span class="w"></span> +<a id="line-893" name="line-893"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxUpdateHook</span><span class="p">)</span><span class="w"> </span><span class="n">handle_shell_touch</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-894" name="line-894"></a> +<a id="line-895" name="line-895"></a><span class="w"> </span><span class="cm">/* add connection handlers */</span><span class="w"></span> +<a id="line-896" name="line-896"></a><span class="w"> </span><span class="n">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span><span class="w"></span> +<a id="line-897" name="line-897"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_connect</span><span class="p">,</span><span class="w"></span> +<a id="line-898" name="line-898"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-899" name="line-899"></a><span class="w"> </span><span class="n">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span><span class="w"></span> +<a id="line-900" name="line-900"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_disconnect</span><span class="p">,</span><span class="w"></span> +<a id="line-901" name="line-901"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-902" name="line-902"></a> +<a id="line-903" name="line-903"></a><span class="w"> </span><span class="cm">/* now start the connection */</span><span class="w"></span> +<a id="line-904" name="line-904"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"about to start client connection"</span><span class="p">);</span><span class="w"></span> +<a id="line-905" name="line-905"></a><span class="w"> </span><span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span><span class="w"></span> +<a id="line-906" name="line-906"></a> +<a id="line-907" name="line-907"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-908" name="line-908"></a><span class="p">}</span><span class="w"></span> +<a id="line-909" name="line-909"></a> +<a id="line-910" name="line-910"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-911" name="line-911"></a><span class="nf">caja_dropbox_class_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-912" name="line-912"></a><span class="p">}</span><span class="w"></span> +<a id="line-913" name="line-913"></a> +<a id="line-914" name="line-914"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-915" name="line-915"></a><span class="nf">caja_dropbox_class_finalize</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-916" name="line-916"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"just checking"</span><span class="p">);</span><span class="w"></span> +<a id="line-917" name="line-917"></a><span class="w"> </span><span class="cm">/* kill threads here? */</span><span class="w"></span> +<a id="line-918" name="line-918"></a><span class="p">}</span><span class="w"></span> +<a id="line-919" name="line-919"></a> +<a id="line-920" name="line-920"></a><span class="n">GType</span><span class="w"></span> +<a id="line-921" name="line-921"></a><span class="nf">caja_dropbox_get_type</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-922" name="line-922"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_type</span><span class="p">;</span><span class="w"></span> +<a id="line-923" name="line-923"></a><span class="p">}</span><span class="w"></span> +<a id="line-924" name="line-924"></a> +<a id="line-925" name="line-925"></a><span class="kt">void</span><span class="w"></span> +<a id="line-926" name="line-926"></a><span class="nf">caja_dropbox_register_type</span><span class="w"> </span><span class="p">(</span><span class="n">GTypeModule</span><span class="w"> </span><span class="o">*</span><span class="n">module</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-927" name="line-927"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GTypeInfo</span><span class="w"> </span><span class="n">info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-928" name="line-928"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="p">),</span><span class="w"></span> +<a id="line-929" name="line-929"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseInitFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-930" name="line-930"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-931" name="line-931"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_init</span><span class="p">,</span><span class="w"></span> +<a id="line-932" name="line-932"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_finalize</span><span class="p">,</span><span class="w"></span> +<a id="line-933" name="line-933"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-934" name="line-934"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="p">),</span><span class="w"></span> +<a id="line-935" name="line-935"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"></span> +<a id="line-936" name="line-936"></a><span class="w"> </span><span class="p">(</span><span class="n">GInstanceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_instance_init</span><span class="p">,</span><span class="w"></span> +<a id="line-937" name="line-937"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-938" name="line-938"></a> +<a id="line-939" name="line-939"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">menu_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-940" name="line-940"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_menu_provider_iface_init</span><span class="p">,</span><span class="w"></span> +<a id="line-941" name="line-941"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-942" name="line-942"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-943" name="line-943"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-944" name="line-944"></a> +<a id="line-945" name="line-945"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">info_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-946" name="line-946"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_info_provider_iface_init</span><span class="p">,</span><span class="w"></span> +<a id="line-947" name="line-947"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-948" name="line-948"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-949" name="line-949"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-950" name="line-950"></a> +<a id="line-951" name="line-951"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"></span> +<a id="line-952" name="line-952"></a><span class="w"> </span><span class="n">g_type_module_register_type</span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-953" name="line-953"></a><span class="w"> </span><span class="n">G_TYPE_OBJECT</span><span class="p">,</span><span class="w"></span> +<a id="line-954" name="line-954"></a><span class="w"> </span><span class="s">"CajaDropbox"</span><span class="p">,</span><span class="w"></span> +<a id="line-955" name="line-955"></a><span class="w"> </span><span class="o">&</span><span class="n">info</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span> +<a id="line-956" name="line-956"></a> +<a id="line-957" name="line-957"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-958" name="line-958"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span><span class="w"></span> +<a id="line-959" name="line-959"></a><span class="w"> </span><span class="n">CAJA_TYPE_MENU_PROVIDER</span><span class="p">,</span><span class="w"></span> +<a id="line-960" name="line-960"></a><span class="w"> </span><span class="o">&</span><span class="n">menu_provider_iface_info</span><span class="p">);</span><span class="w"></span> +<a id="line-961" name="line-961"></a> +<a id="line-962" name="line-962"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-963" name="line-963"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span><span class="w"></span> +<a id="line-964" name="line-964"></a><span class="w"> </span><span class="n">CAJA_TYPE_INFO_PROVIDER</span><span class="p">,</span><span class="w"></span> +<a id="line-965" name="line-965"></a><span class="w"> </span><span class="o">&</span><span class="n">info_provider_iface_info</span><span class="p">);</span><span class="w"></span> +<a id="line-966" name="line-966"></a><span class="p">}</span><span class="w"></span> +</pre></div> +</td></tr></table> + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/index.html b/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/index.html new file mode 100644 index 0000000..2c87aae --- /dev/null +++ b/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/index.html @@ -0,0 +1,202 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox</h1> + <div id="filters"> + + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="error"disabled/>error</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="warning"disabled/>warning</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="portability"checked/>portability</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="performance"disabled/>performance</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="style"checked/>style</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="information"checked/>information</label> + | + <label class="checkBtn"><input type="checkbox" onclick="toggleTool(this)" id="cppcheck"checked/>cppcheck</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleTool(this)" id="clang-tidy"disabled/>clang-tidy</label> + | + <label class="severityHeader">File: <input type="text" oninput="filterFile(this.value)"/></label> + <label class="severityHeader">Filter: <input type="text" oninput="filterText(this.value)"/></label> + </div> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Defect summary</a> </p> + + <label><input type="checkbox" class="idToggle" onclick="toggleAll()" checked> Toggle all</label> + <table> + <tr><th>Show</th><th>#</th><th>Defect ID</th></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="variableScope" name="variableScope" checked></td><td>2</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>1</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="missingIncludeSystem" name="missingIncludeSystem" checked></td><td>1</td><td>missingIncludeSystem</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="varFuncNullUB" name="varFuncNullUB" checked></td><td>1</td><td>varFuncNullUB</td></tr> + <tr><td></td><td>5</td><td>total</td></tr> + </table> + <p><a href="stats.html">Statistics</a></p> + </div> + <div id="content_index"> + + <table class="summaryTable"> + <tr><th>Line</th><th>Id</th><th>CWE</th><th>Severity</th><th>Message</th></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="1.html"></a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Cppcheck cannot find all the include files (use --check-config for details)</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="0.html">src/caja-dropbox.c</a></td></tr> + <tr class="variableScope sev_style issue"><td><a href="0.html#line-312">312</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 'file' can be reduced.</td></tr> + <tr class="variableScope sev_style issue"><td><a href="0.html#line-752">752</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 'i' can be reduced.</td></tr> + <tr class="knownConditionTrueFalse sev_style issue"><td><a href="0.html#line-756">756</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td>Condition 'emblem_paths_response' is always true</td></tr> + <tr class="varFuncNullUB sev_portability issue"><td><a href="0.html#line-847">847</a></td><td>varFuncNullUB</td><td><a href="https://cwe.mitre.org/data/definitions/475.html">475</a></td><td>portability</td><td>Passing NULL after the last typed argument to a variadic function leads to undefined behaviour.</td></tr> + </tbody> + </table> + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/stats.html b/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/stats.html new file mode 100644 index 0000000..6f8dab3 --- /dev/null +++ b/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/stats.html @@ -0,0 +1,170 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: Statistics</h1> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Back to summary</a> </p> + + </div> + <div id="content_index"> +<p><span class="statHeader">Top 10 files for portability severity, total findings: 1</span><br> +   1 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> +<p><span class="statHeader">Top 10 files for style severity, total findings: 3</span><br> +   3 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/style.css b/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/style.css new file mode 100644 index 0000000..3897bfa --- /dev/null +++ b/2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/style.css @@ -0,0 +1,177 @@ + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; + font-size: 13px; + line-height: 1.5; + height: 100%; + margin: 0; +} + +#wrapper { + position: fixed; + height: 100vh; + width: 100vw; + display: grid; + grid-template-rows: fit-content(8rem) auto fit-content(8rem); + grid-template-columns: fit-content(25%) 1fr; + grid-template-areas: + "header header" + "menu content" + "footer footer"; +} + +h1 { + margin: 0 0 8px -2px; + font-size: 175%; +} + +.header { + padding: 0 0 5px 15px; + grid-area: header; + border-bottom: thin solid #aaa; +} + +.footer { + grid-area: footer; + border-top: thin solid #aaa; + font-size: 85%; + +} + +.footer > p { + margin: 4px; +} + +#menu, +#menu_index { + grid-area: menu; + text-align: left; + overflow: auto; + padding: 0 23px 15px 15px; + border-right: thin solid #aaa; + min-width: 200px; +} + +#menu > a { + display: block; + margin-left: 10px; + font-size: 12px; +} + +#content, +#content_index { + grid-area: content; + padding: 0px 5px 15px 15px; + overflow: auto; +} + +label { + white-space: nowrap; +} + +label.checkBtn.disabled { + color: #606060; + background: #e0e0e0; + font-style: italic; +} + +label.checkBtn, input[type="text"] { + border: 1px solid grey; + border-radius: 4px; + box-shadow: 1px 1px inset; + padding: 1px 5px; +} + +label.checkBtn { + white-space: nowrap; + background: #ccddff; +} + +label.unchecked { + background: #eff8ff; + box-shadow: 1px 1px 1px; +} + +label.checkBtn:hover, label.unchecked:hover{ + box-shadow: 0 0 2px; +} + +label.disabled:hover { + box-shadow: 1px 1px inset; +} + +label.checkBtn > input { + display:none; +} + +.summaryTable { + width: 100%; +} + +table.summaryTable td { padding: 0 5px 0 5px; } + +.statHeader, .severityHeader { + font-weight: bold; +} + +.warning { + background-color: #ffffa7; +} + +.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; + position: relative; + margin: -10px; +} + +.linenos { + border-right: thin solid #aaa; + color: #d3d3d3; + padding-right: 6px; +} + +.id-filtered, .severity-filtered, .file-filtered, .tool-filtered, .text-filtered { + visibility: collapse; +} diff --git a/2022-11-10-210649-5786-1@ea7b890d9702_master/index.html b/2022-11-10-210649-5786-1@ea7b890d9702_master/index.html new file mode 100644 index 0000000..a971656 --- /dev/null +++ b/2022-11-10-210649-5786-1@ea7b890d9702_master/index.html @@ -0,0 +1,94 @@ +<html> +<head> +<title>rootdir - scan-build results</title> +<link type="text/css" rel="stylesheet" href="scanview.css"/> +<script src="sorttable.js"></script> +<script language='javascript' type="text/javascript"> +function SetDisplay(RowClass, DisplayVal) +{ + var Rows = document.getElementsByTagName("tr"); + for ( var i = 0 ; i < Rows.length; ++i ) { + if (Rows[i].className == RowClass) { + Rows[i].style.display = DisplayVal; + } + } +} + +function CopyCheckedStateToCheckButtons(SummaryCheckButton) { + var Inputs = document.getElementsByTagName("input"); + for ( var i = 0 ; i < Inputs.length; ++i ) { + if (Inputs[i].type == "checkbox") { + if(Inputs[i] != SummaryCheckButton) { + Inputs[i].checked = SummaryCheckButton.checked; + Inputs[i].onclick(); + } + } + } +} + +function returnObjById( id ) { + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +var NumUnchecked = 0; + +function ToggleDisplay(CheckButton, ClassName) { + if (CheckButton.checked) { + SetDisplay(ClassName, ""); + if (--NumUnchecked == 0) { + returnObjById("AllBugsCheck").checked = true; + } + } + else { + SetDisplay(ClassName, "none"); + NumUnchecked++; + returnObjById("AllBugsCheck").checked = false; + } +} +</script> +<!-- SUMMARYENDHEAD --> +</head> +<body> +<h1>rootdir - scan-build results</h1> + +<table> +<tr><th>User:</th><td>root@64b88840efdc</td></tr> +<tr><th>Working Directory:</th><td>/rootdir</td></tr> +<tr><th>Command Line:</th><td>make -j 2</td></tr> +<tr><th>Clang Version:</th><td>clang version 14.0.5 (Fedora 14.0.5-1.fc36) +</td></tr> +<tr><th>Date:</th><td>Thu Nov 10 21:06:49 2022</td></tr> +</table> +<h2>Bug Summary</h2><table> +<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead> +<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">1</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr> +<tr><th>Logic error</th><th colspan=2></th></tr> +<tr><td class="SUMM_DESC">Cast from non-struct type to struct type</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_cast_from_non-struct_type_to_struct_type');" checked/></center></td></tr> +</table> +<h2>Reports</h2> + +<table class="sortable" style="table-layout:automatic"> +<thead><tr> + <td>Bug Group</td> + <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind"> ▾</span></td> + <td>File</td> + <td>Function/Method</td> + <td class="Q">Line</td> + <td class="Q">Path Length</td> + <td class="sorttable_nosort"></td> + <!-- REPORTBUGCOL --> +</tr></thead> +<tbody> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-1b9128.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-1b9128.html" --> +</tr> +</tbody> +</table> + +</body></html> diff --git a/2022-11-10-210649-5786-1@ea7b890d9702_master/report-1b9128.html b/2022-11-10-210649-5786-1@ea7b890d9702_master/report-1b9128.html new file mode 100644 index 0000000..d66f387 --- /dev/null +++ b/2022-11-10-210649-5786-1@ea7b890d9702_master/report-1b9128.html @@ -0,0 +1,1553 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { position:relative } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.msg.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.5 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -D PIC -internal-isystem /usr/lib64/clang/14.0.5/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-11-10-210649-5786-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // SHIFT + S + if (event.shiftKey && event.keyCode == 83) { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].click(); + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> + <input type="checkbox" name="showArrows" + id="showArrows" style="margin-left: 10px" /> + <label for="showArrows"> + Show control flow arrows + </label> +</form> + +<script type='text/javascript'> +// Return range of numbers from a range [lower, upper). +function range(lower, upper) { + var array = []; + for (var i = lower; i <= upper; ++i) { + array.push(i); + } + return array; +} + +var getRelatedArrowIndices = function(pathId) { + // HTML numeration of events is a bit different than it is in the path. + // Everything is rotated one step to the right, so the last element + // (error diagnostic) has index 0. + if (pathId == 0) { + // arrowIndices has at least 2 elements + pathId = arrowIndices.length - 1; + } + + return range(arrowIndices[pathId], arrowIndices[pathId - 1]); +} + +var highlightArrowsForSelectedEvent = function() { + const selectedNum = findNum(); + const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum); + arrowIndicesToHighlight.forEach((index) => { + var arrow = document.querySelector("#arrow" + index); + if(arrow) { + classListAdd(arrow, "selected") + } + }); +} + +var getAbsoluteBoundingRect = function(element) { + const relative = element.getBoundingClientRect(); + return { + left: relative.left + window.pageXOffset, + right: relative.right + window.pageXOffset, + top: relative.top + window.pageYOffset, + bottom: relative.bottom + window.pageYOffset, + height: relative.height, + width: relative.width + }; +} + +var drawArrow = function(index) { + // This function is based on the great answer from SO: + // https://stackoverflow.com/a/39575674/11582326 + var start = document.querySelector("#start" + index); + var end = document.querySelector("#end" + index); + var arrow = document.querySelector("#arrow" + index); + + var startRect = getAbsoluteBoundingRect(start); + var endRect = getAbsoluteBoundingRect(end); + + // It is an arrow from a token to itself, no need to visualize it. + if (startRect.top == endRect.top && + startRect.left == endRect.left) + return; + + // Each arrow is a very simple Bézier curve, with two nodes and + // two handles. So, we need to calculate four points in the window: + // * start node + var posStart = { x: 0, y: 0 }; + // * end node + var posEnd = { x: 0, y: 0 }; + // * handle for the start node + var startHandle = { x: 0, y: 0 }; + // * handle for the end node + var endHandle = { x: 0, y: 0 }; + // One can visualize it as follows: + // + // start handle + // / + // X"""_.-""""X + // .' \ + // / start node + // | + // | + // | end node + // \ / + // `->X + // X-' + // \ + // end handle + // + // NOTE: (0, 0) is the top left corner of the window. + + // We have 3 similar, but still different scenarios to cover: + // + // 1. Two tokens on different lines. + // -xxx + // / + // \ + // -> xxx + // In this situation, we draw arrow on the left curving to the left. + // 2. Two tokens on the same line, and the destination is on the right. + // ____ + // / \ + // / V + // xxx xxx + // In this situation, we draw arrow above curving upwards. + // 3. Two tokens on the same line, and the destination is on the left. + // xxx xxx + // ^ / + // \____/ + // In this situation, we draw arrow below curving downwards. + const onDifferentLines = startRect.top <= endRect.top - 5 || + startRect.top >= endRect.top + 5; + const leftToRight = startRect.left < endRect.left; + + // NOTE: various magic constants are chosen empirically for + // better positioning and look + if (onDifferentLines) { + // Case #1 + const topToBottom = startRect.top < endRect.top; + posStart.x = startRect.left - 1; + // We don't want to start it at the top left corner of the token, + // it doesn't feel like this is where the arrow comes from. + // For this reason, we start it in the middle of the left side + // of the token. + posStart.y = startRect.top + startRect.height / 2; + + // End node has arrow head and we give it a bit more space. + posEnd.x = endRect.left - 4; + posEnd.y = endRect.top; + + // Utility object with x and y offsets for handles. + var curvature = { + // We want bottom-to-top arrow to curve a bit more, so it doesn't + // overlap much with top-to-bottom curves (much more frequent). + x: topToBottom ? 15 : 25, + y: Math.min((posEnd.y - posStart.y) / 3, 10) + } + + // When destination is on the different line, we can make a + // curvier arrow because we have space for it. + // So, instead of using + // + // startHandle.x = posStart.x - curvature.x + // endHandle.x = posEnd.x - curvature.x + // + // We use the leftmost of these two values for both handles. + startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x; + endHandle.x = startHandle.x; + + // Curving downwards from the start node... + startHandle.y = posStart.y + curvature.y; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else if (leftToRight) { + // Case #2 + // Starting from the top right corner... + posStart.x = startRect.right - 1; + posStart.y = startRect.top; + + // ...and ending at the top left corner of the end token. + posEnd.x = endRect.left + 1; + posEnd.y = endRect.top - 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posEnd.x - posStart.x) / 3, 15), + y: 5 + } + + // Curving to the right... + startHandle.x = posStart.x + curvature.x; + // ... and upwards from the start node. + startHandle.y = posStart.y - curvature.y; + + // And to the left... + endHandle.x = posEnd.x - curvature.x; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else { + // Case #3 + // Starting from the bottom right corner... + posStart.x = startRect.right; + posStart.y = startRect.bottom; + + // ...and ending also at the bottom right corner, but of the end token. + posEnd.x = endRect.right - 1; + posEnd.y = endRect.bottom + 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posStart.x - posEnd.x) / 3, 15), + y: 5 + } + + // Curving to the left... + startHandle.x = posStart.x - curvature.x; + // ... and downwards from the start node. + startHandle.y = posStart.y + curvature.y; + + // And to the right... + endHandle.x = posEnd.x + curvature.x; + // ... and downwards from the end node. + endHandle.y = posEnd.y + curvature.y; + } + + // Put it all together into a path. + // More information on the format: + // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths + var pathStr = "M" + posStart.x + "," + posStart.y + " " + + "C" + startHandle.x + "," + startHandle.y + " " + + endHandle.x + "," + endHandle.y + " " + + posEnd.x + "," + posEnd.y; + + arrow.setAttribute("d", pathStr); +}; + +var drawArrows = function() { + const numOfArrows = document.querySelectorAll("path[id^=arrow]").length; + for (var i = 0; i < numOfArrows; ++i) { + drawArrow(i); + } +} + +var toggleArrows = function(event) { + const arrows = document.querySelector("#arrows"); + if (event.target.checked) { + arrows.setAttribute("visibility", "visible"); + } else { + arrows.setAttribute("visibility", "hidden"); + } +} + +window.addEventListener("resize", drawArrows); +document.addEventListener("DOMContentLoaded", function() { + // Whenever we show invocation, locations change, i.e. we + // need to redraw arrows. + document + .querySelector('input[id="showinvocation"]') + .addEventListener("click", drawArrows); + // Hiding irrelevant lines also should cause arrow rerender. + document + .querySelector('input[name="showCounterexample"]') + .addEventListener("change", drawArrows); + document + .querySelector('input[name="showArrows"]') + .addEventListener("change", toggleArrows); + drawArrows(); + // Default highlighting for the last event. + highlightArrowsForSelectedEvent(); +}); +</script> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".msg.selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var classListAdd = function(el, theClass) { + if(!el.className.baseVal) + el.className += " " + theClass; + else + el.className.baseVal += " " + theClass; +}; + +var classListRemove = function(el, theClass) { + var className = (!el.className.baseVal) ? + el.className : el.className.baseVal; + className = className.replace(" " + theClass, ""); + if(!el.className.baseVal) + el.className = className; + else + el.className.baseVal = className; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + classListRemove(s, "selected"); + }); + classListAdd(el, "selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); + highlightArrowsForSelectedEvent(); +}; + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // key 'j' + if (event.keyCode == 74) { + navigateTo(/*up=*/false); + // key 'k' + } else if (event.keyCode == 75) { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> + +<style type="text/css"> + svg { + position:absolute; + top:0; + left:0; + height:100%; + width:100%; + pointer-events: none; + overflow: visible + } + .arrow { + stroke-opacity: 0.2; + stroke-width: 1; + marker-end: url(#arrowhead); + } + + .arrow.selected { + stroke-opacity: 0.6; + stroke-width: 2; + marker-end: url(#arrowheadSelected); + } + + .arrowhead { + orient: auto; + stroke: none; + opacity: 0.6; + fill: blue; + } +</style> +<svg xmlns="http://www.w3.org/2000/svg"> + <defs> + <marker id="arrowheadSelected" class="arrowhead" opacity="0.6" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + <marker id="arrowhead" class="arrowhead" opacity="0.2" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + </defs> + <g id="arrows" fill="none" stroke="blue" visibility="hidden"> + + </g> +</svg> +<script type='text/javascript'> +const arrowIndices = [ 0,0 ] +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2022-11-10-210649-5786-1@ea7b890d9702_master/scanview.css b/2022-11-10-210649-5786-1@ea7b890d9702_master/scanview.css new file mode 100644 index 0000000..cf8a5a6 --- /dev/null +++ b/2022-11-10-210649-5786-1@ea7b890d9702_master/scanview.css @@ -0,0 +1,62 @@ +body { color:#000000; background-color:#ffffff } +body { font-family: Helvetica, sans-serif; font-size:9pt } +h1 { font-size: 14pt; } +h2 { font-size: 12pt; } +table { font-size:9pt } +table { border-spacing: 0px; border: 1px solid black } +th, table thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + font-weight: bold; font-family: Verdana; + white-space:nowrap; +} +.W { font-size:0px } +th, td { padding:5px; padding-left:8px; text-align:left } +td.SUMM_DESC { padding-left:12px } +td.DESC { white-space:pre } +td.Q { text-align:right } +td { text-align:left } +tbody.scrollContent { overflow:auto } + +table.form_group { + background-color: #ccc; + border: 1px solid #333; + padding: 2px; +} + +table.form_inner_group { + background-color: #ccc; + border: 1px solid #333; + padding: 0px; +} + +table.form { + background-color: #999; + border: 1px solid #333; + padding: 2px; +} + +td.form_label { + text-align: right; + vertical-align: top; +} +/* For one line entires */ +td.form_clabel { + text-align: right; + vertical-align: center; +} +td.form_value { + text-align: left; + vertical-align: top; +} +td.form_submit { + text-align: right; + vertical-align: top; +} + +h1.SubmitFail { + color: #f00; +} +h1.SubmitOk { +} diff --git a/2022-11-10-210649-5786-1@ea7b890d9702_master/sorttable.js b/2022-11-10-210649-5786-1@ea7b890d9702_master/sorttable.js new file mode 100644 index 0000000..32faa07 --- /dev/null +++ b/2022-11-10-210649-5786-1@ea7b890d9702_master/sorttable.js @@ -0,0 +1,492 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backward compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + //row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[�$�]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; diff --git a/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/0.html b/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/0.html new file mode 100644 index 0000000..10d21ac --- /dev/null +++ b/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/0.html @@ -0,0 +1,2231 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/caja-dropbox.c</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> caja-dropbox.c</p> +<a href="0.html#line-312"> variableScope 312</a><a href="0.html#line-752"> variableScope 752</a><a href="0.html#line-756"> knownConditionTrueFalse 756</a><a href="0.html#line-847"> varFuncNullUB 847</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span> +<span class="normal">114</span> +<span class="normal">115</span> +<span class="normal">116</span> +<span class="normal">117</span> +<span class="normal">118</span> +<span class="normal">119</span> +<span class="normal">120</span> +<span class="normal">121</span> +<span class="normal">122</span> +<span class="normal">123</span> +<span class="normal">124</span> +<span class="normal">125</span> +<span class="normal">126</span> +<span class="normal">127</span> +<span class="normal">128</span> +<span class="normal">129</span> +<span class="normal">130</span> +<span class="normal">131</span> +<span class="normal">132</span> +<span class="normal">133</span> +<span class="normal">134</span> +<span class="normal">135</span> +<span class="normal">136</span> +<span class="normal">137</span> +<span class="normal">138</span> +<span class="normal">139</span> +<span class="normal">140</span> +<span class="normal">141</span> +<span class="normal">142</span> +<span class="normal">143</span> +<span class="normal">144</span> +<span class="normal">145</span> +<span class="normal">146</span> +<span class="normal">147</span> +<span class="normal">148</span> +<span class="normal">149</span> +<span class="normal">150</span> +<span class="normal">151</span> +<span class="normal">152</span> +<span class="normal">153</span> +<span class="normal">154</span> +<span class="normal">155</span> +<span class="normal">156</span> +<span class="normal">157</span> +<span class="normal">158</span> +<span class="normal">159</span> +<span class="normal">160</span> +<span class="normal">161</span> +<span class="normal">162</span> +<span class="normal">163</span> +<span class="normal">164</span> +<span class="normal">165</span> +<span class="normal">166</span> +<span class="normal">167</span> +<span class="normal">168</span> +<span class="normal">169</span> +<span class="normal">170</span> +<span class="normal">171</span> +<span class="normal">172</span> +<span class="normal">173</span> +<span class="normal">174</span> +<span class="normal">175</span> +<span class="normal">176</span> +<span class="normal">177</span> +<span class="normal">178</span> +<span class="normal">179</span> +<span class="normal">180</span> +<span class="normal">181</span> +<span class="normal">182</span> +<span class="normal">183</span> +<span class="normal">184</span> +<span class="normal">185</span> +<span class="normal">186</span> +<span class="normal">187</span> +<span class="normal">188</span> +<span class="normal">189</span> +<span class="normal">190</span> +<span class="normal">191</span> +<span class="normal">192</span> +<span class="normal">193</span> +<span class="normal">194</span> +<span class="normal">195</span> +<span class="normal">196</span> +<span class="normal">197</span> +<span class="normal">198</span> +<span class="normal">199</span> +<span class="normal">200</span> +<span class="normal">201</span> +<span class="normal">202</span> +<span class="normal">203</span> +<span class="normal">204</span> +<span class="normal">205</span> +<span class="normal">206</span> +<span class="normal">207</span> +<span class="normal">208</span> +<span class="normal">209</span> +<span class="normal">210</span> +<span class="normal">211</span> +<span class="normal">212</span> +<span class="normal">213</span> +<span class="normal">214</span> +<span class="normal">215</span> +<span class="normal">216</span> +<span class="normal">217</span> +<span class="normal">218</span> +<span class="normal">219</span> +<span class="normal">220</span> +<span class="normal">221</span> +<span class="normal">222</span> +<span class="normal">223</span> +<span class="normal">224</span> +<span class="normal">225</span> +<span class="normal">226</span> +<span class="normal">227</span> +<span class="normal">228</span> +<span class="normal">229</span> +<span class="normal">230</span> +<span class="normal">231</span> +<span class="normal">232</span> +<span class="normal">233</span> +<span class="normal">234</span> +<span class="normal">235</span> +<span class="normal">236</span> +<span class="normal">237</span> +<span class="normal">238</span> +<span class="normal">239</span> +<span class="normal">240</span> +<span class="normal">241</span> +<span class="normal">242</span> +<span class="normal">243</span> +<span class="normal">244</span> +<span class="normal">245</span> +<span class="normal">246</span> +<span class="normal">247</span> +<span class="normal">248</span> +<span class="normal">249</span> +<span class="normal">250</span> +<span class="normal">251</span> +<span class="normal">252</span> +<span class="normal">253</span> +<span class="normal">254</span> +<span class="normal">255</span> +<span class="normal">256</span> +<span class="normal">257</span> +<span class="normal">258</span> +<span class="normal">259</span> +<span class="normal">260</span> +<span class="normal">261</span> +<span class="normal">262</span> +<span class="normal">263</span> +<span class="normal">264</span> +<span class="normal">265</span> +<span class="normal">266</span> +<span class="normal">267</span> +<span class="normal">268</span> +<span class="normal">269</span> +<span class="normal">270</span> +<span class="normal">271</span> +<span class="normal">272</span> +<span class="normal">273</span> +<span class="normal">274</span> +<span class="normal">275</span> +<span class="normal">276</span> +<span class="normal">277</span> +<span class="normal">278</span> +<span class="normal">279</span> +<span class="normal">280</span> +<span class="normal">281</span> +<span class="normal">282</span> +<span class="normal">283</span> +<span class="normal">284</span> +<span class="normal">285</span> +<span class="normal">286</span> +<span class="normal">287</span> +<span class="normal">288</span> +<span class="normal">289</span> +<span class="normal">290</span> +<span class="normal">291</span> +<span class="normal">292</span> +<span class="normal">293</span> +<span class="normal">294</span> +<span class="normal">295</span> +<span class="normal">296</span> +<span class="normal">297</span> +<span class="normal">298</span> +<span class="normal">299</span> +<span class="normal">300</span> +<span class="normal">301</span> +<span class="normal">302</span> +<span class="normal">303</span> +<span class="normal">304</span> +<span class="normal">305</span> +<span class="normal">306</span> +<span class="normal">307</span> +<span class="normal">308</span> +<span class="normal">309</span> +<span class="normal">310</span> +<span class="normal">311</span> +<span class="normal">312</span> +<span class="normal">313</span> +<span class="normal">314</span> +<span class="normal">315</span> +<span class="normal">316</span> +<span class="normal">317</span> +<span class="normal">318</span> +<span class="normal">319</span> +<span class="normal">320</span> +<span class="normal">321</span> +<span class="normal">322</span> +<span class="normal">323</span> +<span class="normal">324</span> +<span class="normal">325</span> +<span class="normal">326</span> +<span class="normal">327</span> +<span class="normal">328</span> +<span class="normal">329</span> +<span class="normal">330</span> +<span class="normal">331</span> +<span class="normal">332</span> +<span class="normal">333</span> +<span class="normal">334</span> +<span class="normal">335</span> +<span class="normal">336</span> +<span class="normal">337</span> +<span class="normal">338</span> +<span class="normal">339</span> +<span class="normal">340</span> +<span class="normal">341</span> +<span class="normal">342</span> +<span class="normal">343</span> +<span class="normal">344</span> +<span class="normal">345</span> +<span class="normal">346</span> +<span class="normal">347</span> +<span class="normal">348</span> +<span class="normal">349</span> +<span class="normal">350</span> +<span class="normal">351</span> +<span class="normal">352</span> +<span class="normal">353</span> +<span class="normal">354</span> +<span class="normal">355</span> +<span class="normal">356</span> +<span class="normal">357</span> +<span class="normal">358</span> +<span class="normal">359</span> +<span class="normal">360</span> +<span class="normal">361</span> +<span class="normal">362</span> +<span class="normal">363</span> +<span class="normal">364</span> +<span class="normal">365</span> +<span class="normal">366</span> +<span class="normal">367</span> +<span class="normal">368</span> +<span class="normal">369</span> +<span class="normal">370</span> +<span class="normal">371</span> +<span class="normal">372</span> +<span class="normal">373</span> +<span class="normal">374</span> +<span class="normal">375</span> +<span class="normal">376</span> +<span class="normal">377</span> +<span class="normal">378</span> +<span class="normal">379</span> +<span class="normal">380</span> +<span class="normal">381</span> +<span class="normal">382</span> +<span class="normal">383</span> +<span class="normal">384</span> +<span class="normal">385</span> +<span class="normal">386</span> +<span class="normal">387</span> +<span class="normal">388</span> +<span class="normal">389</span> +<span class="normal">390</span> +<span class="normal">391</span> +<span class="normal">392</span> +<span class="normal">393</span> +<span class="normal">394</span> +<span class="normal">395</span> +<span class="normal">396</span> +<span class="normal">397</span> +<span class="normal">398</span> +<span class="normal">399</span> +<span class="normal">400</span> +<span class="normal">401</span> +<span class="normal">402</span> +<span class="normal">403</span> +<span class="normal">404</span> +<span class="normal">405</span> +<span class="normal">406</span> +<span class="normal">407</span> +<span class="normal">408</span> +<span class="normal">409</span> +<span class="normal">410</span> +<span class="normal">411</span> +<span class="normal">412</span> +<span class="normal">413</span> +<span class="normal">414</span> +<span class="normal">415</span> +<span class="normal">416</span> +<span class="normal">417</span> +<span class="normal">418</span> +<span class="normal">419</span> +<span class="normal">420</span> +<span class="normal">421</span> +<span class="normal">422</span> +<span class="normal">423</span> +<span class="normal">424</span> +<span class="normal">425</span> +<span class="normal">426</span> +<span class="normal">427</span> +<span class="normal">428</span> +<span class="normal">429</span> +<span class="normal">430</span> +<span class="normal">431</span> +<span class="normal">432</span> +<span class="normal">433</span> +<span class="normal">434</span> +<span class="normal">435</span> +<span class="normal">436</span> +<span class="normal">437</span> +<span class="normal">438</span> +<span class="normal">439</span> +<span class="normal">440</span> +<span class="normal">441</span> +<span class="normal">442</span> +<span class="normal">443</span> +<span class="normal">444</span> +<span class="normal">445</span> +<span class="normal">446</span> +<span class="normal">447</span> +<span class="normal">448</span> +<span class="normal">449</span> +<span class="normal">450</span> +<span class="normal">451</span> +<span class="normal">452</span> +<span class="normal">453</span> +<span class="normal">454</span> +<span class="normal">455</span> +<span class="normal">456</span> +<span class="normal">457</span> +<span class="normal">458</span> +<span class="normal">459</span> +<span class="normal">460</span> +<span class="normal">461</span> +<span class="normal">462</span> +<span class="normal">463</span> +<span class="normal">464</span> +<span class="normal">465</span> +<span class="normal">466</span> +<span class="normal">467</span> +<span class="normal">468</span> +<span class="normal">469</span> +<span class="normal">470</span> +<span class="normal">471</span> +<span class="normal">472</span> +<span class="normal">473</span> +<span class="normal">474</span> +<span class="normal">475</span> +<span class="normal">476</span> +<span class="normal">477</span> +<span class="normal">478</span> +<span class="normal">479</span> +<span class="normal">480</span> +<span class="normal">481</span> +<span class="normal">482</span> +<span class="normal">483</span> +<span class="normal">484</span> +<span class="normal">485</span> +<span class="normal">486</span> +<span class="normal">487</span> +<span class="normal">488</span> +<span class="normal">489</span> +<span class="normal">490</span> +<span class="normal">491</span> +<span class="normal">492</span> +<span class="normal">493</span> +<span class="normal">494</span> +<span class="normal">495</span> +<span class="normal">496</span> +<span class="normal">497</span> +<span class="normal">498</span> +<span class="normal">499</span> +<span class="normal">500</span> +<span class="normal">501</span> +<span class="normal">502</span> +<span class="normal">503</span> +<span class="normal">504</span> +<span class="normal">505</span> +<span class="normal">506</span> +<span class="normal">507</span> +<span class="normal">508</span> +<span class="normal">509</span> +<span class="normal">510</span> +<span class="normal">511</span> +<span class="normal">512</span> +<span class="normal">513</span> +<span class="normal">514</span> +<span class="normal">515</span> +<span class="normal">516</span> +<span class="normal">517</span> +<span class="normal">518</span> +<span class="normal">519</span> +<span class="normal">520</span> +<span class="normal">521</span> +<span class="normal">522</span> +<span class="normal">523</span> +<span class="normal">524</span> +<span class="normal">525</span> +<span class="normal">526</span> +<span class="normal">527</span> +<span class="normal">528</span> +<span class="normal">529</span> +<span class="normal">530</span> +<span class="normal">531</span> +<span class="normal">532</span> +<span class="normal">533</span> +<span class="normal">534</span> +<span class="normal">535</span> +<span class="normal">536</span> +<span class="normal">537</span> +<span class="normal">538</span> +<span class="normal">539</span> +<span class="normal">540</span> +<span class="normal">541</span> +<span class="normal">542</span> +<span class="normal">543</span> +<span class="normal">544</span> +<span class="normal">545</span> +<span class="normal">546</span> +<span class="normal">547</span> +<span class="normal">548</span> +<span class="normal">549</span> +<span class="normal">550</span> +<span class="normal">551</span> +<span class="normal">552</span> +<span class="normal">553</span> +<span class="normal">554</span> +<span class="normal">555</span> +<span class="normal">556</span> +<span class="normal">557</span> +<span class="normal">558</span> +<span class="normal">559</span> +<span class="normal">560</span> +<span class="normal">561</span> +<span class="normal">562</span> +<span class="normal">563</span> +<span class="normal">564</span> +<span class="normal">565</span> +<span class="normal">566</span> +<span class="normal">567</span> +<span class="normal">568</span> +<span class="normal">569</span> +<span class="normal">570</span> +<span class="normal">571</span> +<span class="normal">572</span> +<span class="normal">573</span> +<span class="normal">574</span> +<span class="normal">575</span> +<span class="normal">576</span> +<span class="normal">577</span> +<span class="normal">578</span> +<span class="normal">579</span> +<span class="normal">580</span> +<span class="normal">581</span> +<span class="normal">582</span> +<span class="normal">583</span> +<span class="normal">584</span> +<span class="normal">585</span> +<span class="normal">586</span> +<span class="normal">587</span> +<span class="normal">588</span> +<span class="normal">589</span> +<span class="normal">590</span> +<span class="normal">591</span> +<span class="normal">592</span> +<span class="normal">593</span> +<span class="normal">594</span> +<span class="normal">595</span> +<span class="normal">596</span> +<span class="normal">597</span> +<span class="normal">598</span> +<span class="normal">599</span> +<span class="normal">600</span> +<span class="normal">601</span> +<span class="normal">602</span> +<span class="normal">603</span> +<span class="normal">604</span> +<span class="normal">605</span> +<span class="normal">606</span> +<span class="normal">607</span> +<span class="normal">608</span> +<span class="normal">609</span> +<span class="normal">610</span> +<span class="normal">611</span> +<span class="normal">612</span> +<span class="normal">613</span> +<span class="normal">614</span> +<span class="normal">615</span> +<span class="normal">616</span> +<span class="normal">617</span> +<span class="normal">618</span> +<span class="normal">619</span> +<span class="normal">620</span> +<span class="normal">621</span> +<span class="normal">622</span> +<span class="normal">623</span> +<span class="normal">624</span> +<span class="normal">625</span> +<span class="normal">626</span> +<span class="normal">627</span> +<span class="normal">628</span> +<span class="normal">629</span> +<span class="normal">630</span> +<span class="normal">631</span> +<span class="normal">632</span> +<span class="normal">633</span> +<span class="normal">634</span> +<span class="normal">635</span> +<span class="normal">636</span> +<span class="normal">637</span> +<span class="normal">638</span> +<span class="normal">639</span> +<span class="normal">640</span> +<span class="normal">641</span> +<span class="normal">642</span> +<span class="normal">643</span> +<span class="normal">644</span> +<span class="normal">645</span> +<span class="normal">646</span> +<span class="normal">647</span> +<span class="normal">648</span> +<span class="normal">649</span> +<span class="normal">650</span> +<span class="normal">651</span> +<span class="normal">652</span> +<span class="normal">653</span> +<span class="normal">654</span> +<span class="normal">655</span> +<span class="normal">656</span> +<span class="normal">657</span> +<span class="normal">658</span> +<span class="normal">659</span> +<span class="normal">660</span> +<span class="normal">661</span> +<span class="normal">662</span> +<span class="normal">663</span> +<span class="normal">664</span> +<span class="normal">665</span> +<span class="normal">666</span> +<span class="normal">667</span> +<span class="normal">668</span> +<span class="normal">669</span> +<span class="normal">670</span> +<span class="normal">671</span> +<span class="normal">672</span> +<span class="normal">673</span> +<span class="normal">674</span> +<span class="normal">675</span> +<span class="normal">676</span> +<span class="normal">677</span> +<span class="normal">678</span> +<span class="normal">679</span> +<span class="normal">680</span> +<span class="normal">681</span> +<span class="normal">682</span> +<span class="normal">683</span> +<span class="normal">684</span> +<span class="normal">685</span> +<span class="normal">686</span> +<span class="normal">687</span> +<span class="normal">688</span> +<span class="normal">689</span> +<span class="normal">690</span> +<span class="normal">691</span> +<span class="normal">692</span> +<span class="normal">693</span> +<span class="normal">694</span> +<span class="normal">695</span> +<span class="normal">696</span> +<span class="normal">697</span> +<span class="normal">698</span> +<span class="normal">699</span> +<span class="normal">700</span> +<span class="normal">701</span> +<span class="normal">702</span> +<span class="normal">703</span> +<span class="normal">704</span> +<span class="normal">705</span> +<span class="normal">706</span> +<span class="normal">707</span> +<span class="normal">708</span> +<span class="normal">709</span> +<span class="normal">710</span> +<span class="normal">711</span> +<span class="normal">712</span> +<span class="normal">713</span> +<span class="normal">714</span> +<span class="normal">715</span> +<span class="normal">716</span> +<span class="normal">717</span> +<span class="normal">718</span> +<span class="normal">719</span> +<span class="normal">720</span> +<span class="normal">721</span> +<span class="normal">722</span> +<span class="normal">723</span> +<span class="normal">724</span> +<span class="normal">725</span> +<span class="normal">726</span> +<span class="normal">727</span> +<span class="normal">728</span> +<span class="normal">729</span> +<span class="normal">730</span> +<span class="normal">731</span> +<span class="normal">732</span> +<span class="normal">733</span> +<span class="normal">734</span> +<span class="normal">735</span> +<span class="normal">736</span> +<span class="normal">737</span> +<span class="normal">738</span> +<span class="normal">739</span> +<span class="normal">740</span> +<span class="normal">741</span> +<span class="normal">742</span> +<span class="normal">743</span> +<span class="normal">744</span> +<span class="normal">745</span> +<span class="normal">746</span> +<span class="normal">747</span> +<span class="normal">748</span> +<span class="normal">749</span> +<span class="normal">750</span> +<span class="normal">751</span> +<span class="normal">752</span> +<span class="normal">753</span> +<span class="normal">754</span> +<span class="normal">755</span> +<span class="normal">756</span> +<span class="normal">757</span> +<span class="normal">758</span> +<span class="normal">759</span> +<span class="normal">760</span> +<span class="normal">761</span> +<span class="normal">762</span> +<span class="normal">763</span> +<span class="normal">764</span> +<span class="normal">765</span> +<span class="normal">766</span> +<span class="normal">767</span> +<span class="normal">768</span> +<span class="normal">769</span> +<span class="normal">770</span> +<span class="normal">771</span> +<span class="normal">772</span> +<span class="normal">773</span> +<span class="normal">774</span> +<span class="normal">775</span> +<span class="normal">776</span> +<span class="normal">777</span> +<span class="normal">778</span> +<span class="normal">779</span> +<span class="normal">780</span> +<span class="normal">781</span> +<span class="normal">782</span> +<span class="normal">783</span> +<span class="normal">784</span> +<span class="normal">785</span> +<span class="normal">786</span> +<span class="normal">787</span> +<span class="normal">788</span> +<span class="normal">789</span> +<span class="normal">790</span> +<span class="normal">791</span> +<span class="normal">792</span> +<span class="normal">793</span> +<span class="normal">794</span> +<span class="normal">795</span> +<span class="normal">796</span> +<span class="normal">797</span> +<span class="normal">798</span> +<span class="normal">799</span> +<span class="normal">800</span> +<span class="normal">801</span> +<span class="normal">802</span> +<span class="normal">803</span> +<span class="normal">804</span> +<span class="normal">805</span> +<span class="normal">806</span> +<span class="normal">807</span> +<span class="normal">808</span> +<span class="normal">809</span> +<span class="normal">810</span> +<span class="normal">811</span> +<span class="normal">812</span> +<span class="normal">813</span> +<span class="normal">814</span> +<span class="normal">815</span> +<span class="normal">816</span> +<span class="normal">817</span> +<span class="normal">818</span> +<span class="normal">819</span> +<span class="normal">820</span> +<span class="normal">821</span> +<span class="normal">822</span> +<span class="normal">823</span> +<span class="normal">824</span> +<span class="normal">825</span> +<span class="normal">826</span> +<span class="normal">827</span> +<span class="normal">828</span> +<span class="normal">829</span> +<span class="normal">830</span> +<span class="normal">831</span> +<span class="normal">832</span> +<span class="normal">833</span> +<span class="normal">834</span> +<span class="normal">835</span> +<span class="normal">836</span> +<span class="normal">837</span> +<span class="normal">838</span> +<span class="normal">839</span> +<span class="normal">840</span> +<span class="normal">841</span> +<span class="normal">842</span> +<span class="normal">843</span> +<span class="normal">844</span> +<span class="normal">845</span> +<span class="normal">846</span> +<span class="normal">847</span> +<span class="normal">848</span> +<span class="normal">849</span> +<span class="normal">850</span> +<span class="normal">851</span> +<span class="normal">852</span> +<span class="normal">853</span> +<span class="normal">854</span> +<span class="normal">855</span> +<span class="normal">856</span> +<span class="normal">857</span> +<span class="normal">858</span> +<span class="normal">859</span> +<span class="normal">860</span> +<span class="normal">861</span> +<span class="normal">862</span> +<span class="normal">863</span> +<span class="normal">864</span> +<span class="normal">865</span> +<span class="normal">866</span> +<span class="normal">867</span> +<span class="normal">868</span> +<span class="normal">869</span> +<span class="normal">870</span> +<span class="normal">871</span> +<span class="normal">872</span> +<span class="normal">873</span> +<span class="normal">874</span> +<span class="normal">875</span> +<span class="normal">876</span> +<span class="normal">877</span> +<span class="normal">878</span> +<span class="normal">879</span> +<span class="normal">880</span> +<span class="normal">881</span> +<span class="normal">882</span> +<span class="normal">883</span> +<span class="normal">884</span> +<span class="normal">885</span> +<span class="normal">886</span> +<span class="normal">887</span> +<span class="normal">888</span> +<span class="normal">889</span> +<span class="normal">890</span> +<span class="normal">891</span> +<span class="normal">892</span> +<span class="normal">893</span> +<span class="normal">894</span> +<span class="normal">895</span> +<span class="normal">896</span> +<span class="normal">897</span> +<span class="normal">898</span> +<span class="normal">899</span> +<span class="normal">900</span> +<span class="normal">901</span> +<span class="normal">902</span> +<span class="normal">903</span> +<span class="normal">904</span> +<span class="normal">905</span> +<span class="normal">906</span> +<span class="normal">907</span> +<span class="normal">908</span> +<span class="normal">909</span> +<span class="normal">910</span> +<span class="normal">911</span> +<span class="normal">912</span> +<span class="normal">913</span> +<span class="normal">914</span> +<span class="normal">915</span> +<span class="normal">916</span> +<span class="normal">917</span> +<span class="normal">918</span> +<span class="normal">919</span> +<span class="normal">920</span> +<span class="normal">921</span> +<span class="normal">922</span> +<span class="normal">923</span> +<span class="normal">924</span> +<span class="normal">925</span> +<span class="normal">926</span> +<span class="normal">927</span> +<span class="normal">928</span> +<span class="normal">929</span> +<span class="normal">930</span> +<span class="normal">931</span> +<span class="normal">932</span> +<span class="normal">933</span> +<span class="normal">934</span> +<span class="normal">935</span> +<span class="normal">936</span> +<span class="normal">937</span> +<span class="normal">938</span> +<span class="normal">939</span> +<span class="normal">940</span> +<span class="normal">941</span> +<span class="normal">942</span> +<span class="normal">943</span> +<span class="normal">944</span> +<span class="normal">945</span> +<span class="normal">946</span> +<span class="normal">947</span> +<span class="normal">948</span> +<span class="normal">949</span> +<span class="normal">950</span> +<span class="normal">951</span> +<span class="normal">952</span> +<span class="normal">953</span> +<span class="normal">954</span> +<span class="normal">955</span> +<span class="normal">956</span> +<span class="normal">957</span> +<span class="normal">958</span> +<span class="normal">959</span> +<span class="normal">960</span> +<span class="normal">961</span> +<span class="normal">962</span> +<span class="normal">963</span> +<span class="normal">964</span> +<span class="normal">965</span> +<span class="normal">966</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * caja-dropbox.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Implements the Caja extension API for Dropbox.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><config.h></span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="cp"></span> +<a id="line-26" name="line-26"></a><span class="cp">#endif</span> +<a id="line-27" name="line-27"></a> +<a id="line-28" name="line-28"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span><span class="cp"></span> +<a id="line-29" name="line-29"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a id="line-30" name="line-30"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/un.h></span><span class="cp"></span> +<a id="line-31" name="line-31"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><errno.h></span><span class="cp"></span> +<a id="line-32" name="line-32"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><unistd.h></span><span class="cp"></span> +<a id="line-33" name="line-33"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><ctype.h></span><span class="cp"></span> +<a id="line-34" name="line-34"></a> +<a id="line-35" name="line-35"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="cp"></span> +<a id="line-36" name="line-36"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib/gprintf.h></span><span class="cp"></span> +<a id="line-37" name="line-37"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib-object.h></span><span class="cp"></span> +<a id="line-38" name="line-38"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtk.h></span><span class="cp"></span> +<a id="line-39" name="line-39"></a> +<a id="line-40" name="line-40"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-extension-types.h></span><span class="cp"></span> +<a id="line-41" name="line-41"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-menu-provider.h></span><span class="cp"></span> +<a id="line-42" name="line-42"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="cp"></span> +<a id="line-43" name="line-43"></a> +<a id="line-44" name="line-44"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"g-util.h"</span><span class="cp"></span> +<a id="line-45" name="line-45"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-command-client.h"</span><span class="cp"></span> +<a id="line-46" name="line-46"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox.h"</span><span class="cp"></span> +<a id="line-47" name="line-47"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a id="line-48" name="line-48"></a> +<a id="line-49" name="line-49"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">emblems</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s">"dropbox-uptodate"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-syncing"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-unsyncable"</span><span class="p">};</span><span class="w"></span> +<a id="line-50" name="line-50"></a><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">EMBLEMDIR</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-51" name="line-51"></a> +<a id="line-52" name="line-52"></a><span class="n">gboolean</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span><span class="w"></span> +<a id="line-53" name="line-53"></a> +<a id="line-54" name="line-54"></a><span class="k">static</span><span class="w"> </span><span class="n">GType</span><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-55" name="line-55"></a> +<a id="line-56" name="line-56"></a><span class="cm">/*</span> +<a id="line-57" name="line-57"></a><span class="cm"> Simplifies a path by removing navigation elements such as '.' and '..'</span> +<a id="line-58" name="line-58"></a> +<a id="line-59" name="line-59"></a><span class="cm"> Arguments:</span> +<a id="line-60" name="line-60"></a><span class="cm"> - path: input path to be canonicalized</span> +<a id="line-61" name="line-61"></a> +<a id="line-62" name="line-62"></a><span class="cm"> Returns:</span> +<a id="line-63" name="line-63"></a><span class="cm"> Canonicalized path if input path is valid.</span> +<a id="line-64" name="line-64"></a><span class="cm"> NULL otherwise.</span> +<a id="line-65" name="line-65"></a><span class="cm">*/</span><span class="w"></span> +<a id="line-66" name="line-66"></a><span class="k">static</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="w"></span> +<a id="line-67" name="line-67"></a><span class="nf">canonicalize_path</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-68" name="line-68"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-69" name="line-69"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-70" name="line-70"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">cpy</span><span class="p">,</span><span class="w"> </span><span class="o">**</span><span class="n">elts</span><span class="p">;</span><span class="w"></span> +<a id="line-71" name="line-71"></a> +<a id="line-72" name="line-72"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-73" name="line-73"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">);</span><span class="w"></span> +<a id="line-74" name="line-74"></a> +<a id="line-75" name="line-75"></a><span class="w"> </span><span class="n">elts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="s">"/"</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span> +<a id="line-76" name="line-76"></a><span class="w"> </span><span class="n">cpy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">g_strv_length</span><span class="p">(</span><span class="n">elts</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-77" name="line-77"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"/"</span><span class="p">;</span><span class="w"></span> +<a id="line-78" name="line-78"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-79" name="line-79"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">".."</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-80" name="line-80"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-81" name="line-81"></a><span class="w"> </span><span class="n">j</span><span class="o">--</span><span class="p">;</span><span class="w"></span> +<a id="line-82" name="line-82"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-83" name="line-83"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-84" name="line-84"></a><span class="w"> </span><span class="c1">// Input path has too many parent directory references and is invalid</span> +<a id="line-85" name="line-85"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-86" name="line-86"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span><span class="w"></span> +<a id="line-87" name="line-87"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-88" name="line-88"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-89" name="line-89"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"."</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-90" name="line-90"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">];</span><span class="w"></span> +<a id="line-91" name="line-91"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-92" name="line-92"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-93" name="line-93"></a> +<a id="line-94" name="line-94"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-95" name="line-95"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_build_filenamev</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span><span class="w"></span> +<a id="line-96" name="line-96"></a> +<a id="line-97" name="line-97"></a><span class="nl">exit</span><span class="p">:</span><span class="w"></span> +<a id="line-98" name="line-98"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span><span class="w"></span> +<a id="line-99" name="line-99"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">elts</span><span class="p">);</span><span class="w"></span> +<a id="line-100" name="line-100"></a> +<a id="line-101" name="line-101"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span><span class="w"></span> +<a id="line-102" name="line-102"></a><span class="p">}</span><span class="w"></span> +<a id="line-103" name="line-103"></a> +<a id="line-104" name="line-104"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-105" name="line-105"></a><span class="nf">reset_file</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-106" name="line-106"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"resetting file %p"</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-107" name="line-107"></a><span class="w"> </span><span class="n">caja_file_info_invalidate_extension_info</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-108" name="line-108"></a><span class="p">}</span><span class="w"></span> +<a id="line-109" name="line-109"></a> +<a id="line-110" name="line-110"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span><span class="w"></span> +<a id="line-111" name="line-111"></a><span class="nf">reset_all_files</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-112" name="line-112"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-113" name="line-113"></a> +<a id="line-114" name="line-114"></a><span class="w"> </span><span class="cm">/* this works because you can call a function pointer with</span> +<a id="line-115" name="line-115"></a><span class="cm"> more arguments than it takes */</span><span class="w"></span> +<a id="line-116" name="line-116"></a><span class="w"> </span><span class="n">g_hash_table_foreach</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GHFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_file</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-117" name="line-117"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-118" name="line-118"></a><span class="p">}</span><span class="w"></span> +<a id="line-119" name="line-119"></a> +<a id="line-120" name="line-120"></a> +<a id="line-121" name="line-121"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-122" name="line-122"></a><span class="nf">when_file_dies</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">address</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-123" name="line-123"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-124" name="line-124"></a> +<a id="line-125" name="line-125"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span><span class="w"></span> +<a id="line-126" name="line-126"></a> +<a id="line-127" name="line-127"></a><span class="w"> </span><span class="cm">/* we never got a change to view this file */</span><span class="w"></span> +<a id="line-128" name="line-128"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-129" name="line-129"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-130" name="line-130"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-131" name="line-131"></a> +<a id="line-132" name="line-132"></a><span class="w"> </span><span class="cm">/* too chatty */</span><span class="w"></span> +<a id="line-133" name="line-133"></a><span class="w"> </span><span class="cm">/* debug("removing %s <-> 0x%p", filename, address); */</span><span class="w"></span> +<a id="line-134" name="line-134"></a> +<a id="line-135" name="line-135"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-136" name="line-136"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span><span class="w"></span> +<a id="line-137" name="line-137"></a><span class="p">}</span><span class="w"></span> +<a id="line-138" name="line-138"></a> +<a id="line-139" name="line-139"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-140" name="line-140"></a><span class="nf">changed_cb</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-141" name="line-141"></a><span class="w"> </span><span class="cm">/* check if this file's path has changed, if so update the hash and invalidate</span> +<a id="line-142" name="line-142"></a><span class="cm"> the file */</span><span class="w"></span> +<a id="line-143" name="line-143"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">;</span><span class="w"></span> +<a id="line-144" name="line-144"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename2</span><span class="p">;</span><span class="w"></span> +<a id="line-145" name="line-145"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span><span class="w"></span> +<a id="line-146" name="line-146"></a> +<a id="line-147" name="line-147"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-148" name="line-148"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-149" name="line-149"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-150" name="line-150"></a> +<a id="line-151" name="line-151"></a><span class="w"> </span><span class="cm">/* Canonicalization will only null-out a non-null filename if it is invalid */</span><span class="w"></span> +<a id="line-152" name="line-152"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">((</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">));</span><span class="w"></span> +<a id="line-153" name="line-153"></a> +<a id="line-154" name="line-154"></a><span class="w"> </span><span class="n">filename2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-155" name="line-155"></a> +<a id="line-156" name="line-156"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-157" name="line-157"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-158" name="line-158"></a> +<a id="line-159" name="line-159"></a><span class="w"> </span><span class="cm">/* if filename2 is NULL we've never seen this file in update_file_info */</span><span class="w"></span> +<a id="line-160" name="line-160"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-161" name="line-161"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-162" name="line-162"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-163" name="line-163"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-164" name="line-164"></a> +<a id="line-165" name="line-165"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-166" name="line-166"></a><span class="w"> </span><span class="cm">/* A file has moved to offline storage. Lets remove it from our tables. */</span><span class="w"></span> +<a id="line-167" name="line-167"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-168" name="line-168"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span><span class="w"></span> +<a id="line-169" name="line-169"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-170" name="line-170"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-171" name="line-171"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-172" name="line-172"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-173" name="line-173"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-174" name="line-174"></a> +<a id="line-175" name="line-175"></a><span class="w"> </span><span class="cm">/* this is a hack, because caja doesn't do this for us, for some reason</span> +<a id="line-176" name="line-176"></a><span class="cm"> the file's path has changed */</span><span class="w"></span> +<a id="line-177" name="line-177"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-178" name="line-178"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shifty old: %s, new %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-179" name="line-179"></a> +<a id="line-180" name="line-180"></a><span class="w"> </span><span class="cm">/* gotta do this first, the call after this frees filename2 */</span><span class="w"></span> +<a id="line-181" name="line-181"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span><span class="w"></span> +<a id="line-182" name="line-182"></a> +<a id="line-183" name="line-183"></a><span class="w"> </span><span class="n">g_hash_table_replace</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span><span class="w"></span> +<a id="line-184" name="line-184"></a> +<a id="line-185" name="line-185"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-186" name="line-186"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span><span class="w"></span> +<a id="line-187" name="line-187"></a><span class="w"> </span><span class="cm">/* we shouldn't have another mapping from filename to an object */</span><span class="w"></span> +<a id="line-188" name="line-188"></a><span class="w"> </span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-189" name="line-189"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">f2</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-190" name="line-190"></a><span class="w"> </span><span class="cm">/* lets fix it if it's true, just remove the mapping */</span><span class="w"></span> +<a id="line-191" name="line-191"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-192" name="line-192"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span><span class="w"></span> +<a id="line-193" name="line-193"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-194" name="line-194"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-195" name="line-195"></a> +<a id="line-196" name="line-196"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-197" name="line-197"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-198" name="line-198"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-199" name="line-199"></a> +<a id="line-200" name="line-200"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-201" name="line-201"></a><span class="p">}</span><span class="w"></span> +<a id="line-202" name="line-202"></a> +<a id="line-203" name="line-203"></a><span class="k">static</span><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"></span> +<a id="line-204" name="line-204"></a><span class="nf">caja_dropbox_update_file_info</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-205" name="line-205"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"></span> +<a id="line-206" name="line-206"></a><span class="w"> </span><span class="n">GClosure</span><span class="w"> </span><span class="o">*</span><span class="n">update_complete</span><span class="p">,</span><span class="w"></span> +<a id="line-207" name="line-207"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">**</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-208" name="line-208"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">;</span><span class="w"></span> +<a id="line-209" name="line-209"></a> +<a id="line-210" name="line-210"></a><span class="w"> </span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-211" name="line-211"></a> +<a id="line-212" name="line-212"></a><span class="w"> </span><span class="cm">/* this code adds this file object to our two-way hash of file objects</span> +<a id="line-213" name="line-213"></a><span class="cm"> so we can shell touch these files later */</span><span class="w"></span> +<a id="line-214" name="line-214"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-215" name="line-215"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span><span class="w"></span> +<a id="line-216" name="line-216"></a> +<a id="line-217" name="line-217"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-218" name="line-218"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-219" name="line-219"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-220" name="line-220"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-221" name="line-221"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-222" name="line-222"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-223" name="line-223"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-224" name="line-224"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-225" name="line-225"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">stored_filename</span><span class="p">;</span><span class="w"></span> +<a id="line-226" name="line-226"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-227" name="line-227"></a> +<a id="line-228" name="line-228"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-229" name="line-229"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-230" name="line-230"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-231" name="line-231"></a><span class="w"> </span><span class="cm">/* pfilename path was invalid if canonicalize operation nulled it out */</span><span class="w"></span> +<a id="line-232" name="line-232"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span><span class="w"></span> +<a id="line-233" name="line-233"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-234" name="line-234"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-235" name="line-235"></a> +<a id="line-236" name="line-236"></a><span class="w"> </span><span class="cm">/* don't worry about the dup checks, gcc is smart enough to optimize this</span> +<a id="line-237" name="line-237"></a><span class="cm"> GCSE ftw */</span><span class="w"></span> +<a id="line-238" name="line-238"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">strcmp</span><span class="p">(</span><span class="n">stored_filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-239" name="line-239"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-240" name="line-240"></a> +<a id="line-241" name="line-241"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-242" name="line-242"></a><span class="w"> </span><span class="cm">/* this happens when the filename changes name on a file obj</span> +<a id="line-243" name="line-243"></a><span class="cm"> but changed_cb isn't called */</span><span class="w"></span> +<a id="line-244" name="line-244"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-245" name="line-245"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-246" name="line-246"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">stored_filename</span><span class="p">);</span><span class="w"></span> +<a id="line-247" name="line-247"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-248" name="line-248"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-249" name="line-249"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-250" name="line-250"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span><span class="w"></span> +<a id="line-251" name="line-251"></a> +<a id="line-252" name="line-252"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-253" name="line-253"></a><span class="w"> </span><span class="cm">/* if the filename exists in the filename2obj hash</span> +<a id="line-254" name="line-254"></a><span class="cm"> but the file obj doesn't exist in the obj2filename hash:</span> +<a id="line-255" name="line-255"></a> +<a id="line-256" name="line-256"></a><span class="cm"> this happens when caja allocates another file object</span> +<a id="line-257" name="line-257"></a><span class="cm"> for a filename without first deleting the original file object</span> +<a id="line-258" name="line-258"></a> +<a id="line-259" name="line-259"></a><span class="cm"> just remove the association to the older file object, it's obsolete</span> +<a id="line-260" name="line-260"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-261" name="line-261"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">f2</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-262" name="line-262"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">f2</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-263" name="line-263"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-264" name="line-264"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span><span class="w"></span> +<a id="line-265" name="line-265"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-266" name="line-266"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-267" name="line-267"></a> +<a id="line-268" name="line-268"></a><span class="w"> </span><span class="cm">/* too chatty */</span><span class="w"></span> +<a id="line-269" name="line-269"></a><span class="w"> </span><span class="cm">/* debug("adding %s <-> 0x%p", filename, file);*/</span><span class="w"></span> +<a id="line-270" name="line-270"></a><span class="w"> </span><span class="n">g_object_weak_ref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-271" name="line-271"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-272" name="line-272"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span><span class="w"></span> +<a id="line-273" name="line-273"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"changed"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-274" name="line-274"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-275" name="line-275"></a> +<a id="line-276" name="line-276"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-277" name="line-277"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-278" name="line-278"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-279" name="line-279"></a> +<a id="line-280" name="line-280"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">))</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-281" name="line-281"></a><span class="w"> </span><span class="n">caja_file_info_is_gone</span><span class="p">(</span><span class="n">file</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-282" name="line-282"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-283" name="line-283"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-284" name="line-284"></a> +<a id="line-285" name="line-285"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-286" name="line-286"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-287" name="line-287"></a> +<a id="line-288" name="line-288"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-289" name="line-289"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">provider</span><span class="p">;</span><span class="w"></span> +<a id="line-290" name="line-290"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GET_FILE_INFO</span><span class="p">;</span><span class="w"></span> +<a id="line-291" name="line-291"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_closure_ref</span><span class="p">(</span><span class="n">update_complete</span><span class="p">);</span><span class="w"></span> +<a id="line-292" name="line-292"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_ref</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-293" name="line-293"></a> +<a id="line-294" name="line-294"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">);</span><span class="w"></span> +<a id="line-295" name="line-295"></a> +<a id="line-296" name="line-296"></a><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">;</span><span class="w"></span> +<a id="line-297" name="line-297"></a> +<a id="line-298" name="line-298"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="w"></span> +<a id="line-299" name="line-299"></a><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="w"></span> +<a id="line-300" name="line-300"></a><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">CAJA_OPERATION_IN_PROGRESS</span><span class="p">;</span><span class="w"></span> +<a id="line-301" name="line-301"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-302" name="line-302"></a><span class="p">}</span><span class="w"></span> +<a id="line-303" name="line-303"></a> +<a id="line-304" name="line-304"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-305" name="line-305"></a><span class="nf">handle_shell_touch</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-306" name="line-306"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">path</span><span class="p">;</span><span class="w"></span> +<a id="line-307" name="line-307"></a> +<a id="line-308" name="line-308"></a><span class="w"> </span><span class="c1">// debug_enter();</span> +<a id="line-309" name="line-309"></a> +<a id="line-310" name="line-310"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-311" name="line-311"></a><span class="w"> </span><span class="n">path</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="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-312" name="line-312"></a><span class="hll"><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">;</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'file' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-313" name="line-313"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-314" name="line-314"></a> +<a id="line-315" name="line-315"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span><span class="w"></span> +<a id="line-316" name="line-316"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-317" name="line-317"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shell touch for %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-318" name="line-318"></a> +<a id="line-319" name="line-319"></a><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-320" name="line-320"></a> +<a id="line-321" name="line-321"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-322" name="line-322"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"gonna reset %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-323" name="line-323"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-324" name="line-324"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-325" name="line-325"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-326" name="line-326"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-327" name="line-327"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-328" name="line-328"></a> +<a id="line-329" name="line-329"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-330" name="line-330"></a><span class="p">}</span><span class="w"></span> +<a id="line-331" name="line-331"></a> +<a id="line-332" name="line-332"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-333" name="line-333"></a><span class="nf">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dficr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-334" name="line-334"></a> +<a id="line-335" name="line-335"></a><span class="w"> </span><span class="c1">//debug_enter();</span> +<a id="line-336" name="line-336"></a><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span><span class="w"></span> +<a id="line-337" name="line-337"></a> +<a id="line-338" name="line-338"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-339" name="line-339"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-340" name="line-340"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">isdir</span><span class="p">;</span><span class="w"></span> +<a id="line-341" name="line-341"></a> +<a id="line-342" name="line-342"></a><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">;</span><span class="w"></span> +<a id="line-343" name="line-343"></a> +<a id="line-344" name="line-344"></a><span class="w"> </span><span class="cm">/* if we have emblems just use them. */</span><span class="w"></span> +<a id="line-345" name="line-345"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-346" name="line-346"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">"emblems"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-347" name="line-347"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-348" name="line-348"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-349" name="line-349"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"></span> +<a id="line-350" name="line-350"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-351" name="line-351"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-352" name="line-352"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-353" name="line-353"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-354" name="line-354"></a><span class="w"> </span><span class="cm">/* if the file status command went okay */</span><span class="w"></span> +<a id="line-355" name="line-355"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-356" name="line-356"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"></span> +<a id="line-357" name="line-357"></a><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">"status"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-358" name="line-358"></a><span class="w"> </span><span class="p">((</span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">TRUE</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-359" name="line-359"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-360" name="line-360"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-361" name="line-361"></a> +<a id="line-362" name="line-362"></a><span class="w"> </span><span class="cm">/* set the tag emblem */</span><span class="w"></span> +<a id="line-363" name="line-363"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">isdir</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-364" name="line-364"></a><span class="w"> </span><span class="p">(</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">"tag"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-365" name="line-365"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-366" name="line-366"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"web"</span><span class="p">);</span><span class="w"></span> +<a id="line-367" name="line-367"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-368" name="line-368"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"shared"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-369" name="line-369"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"people"</span><span class="p">);</span><span class="w"></span> +<a id="line-370" name="line-370"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-371" name="line-371"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"photos"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-372" name="line-372"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"photos"</span><span class="p">);</span><span class="w"></span> +<a id="line-373" name="line-373"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-374" name="line-374"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"sandbox"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-375" name="line-375"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"star"</span><span class="p">);</span><span class="w"></span> +<a id="line-376" name="line-376"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-377" name="line-377"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-378" name="line-378"></a> +<a id="line-379" name="line-379"></a><span class="w"> </span><span class="cm">/* set the status emblem */</span><span class="w"></span> +<a id="line-380" name="line-380"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-381" name="line-381"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-382" name="line-382"></a> +<a id="line-383" name="line-383"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"up to date"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-384" name="line-384"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"></span> +<a id="line-385" name="line-385"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-386" name="line-386"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"syncing"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-387" name="line-387"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"></span> +<a id="line-388" name="line-388"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-389" name="line-389"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"unsyncable"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-390" name="line-390"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"></span> +<a id="line-391" name="line-391"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-392" name="line-392"></a> +<a id="line-393" name="line-393"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_code</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-394" name="line-394"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-395" name="line-395"></a><span class="cm"> debug("%s to %s", emblems[emblem_code-1],</span> +<a id="line-396" name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr->dfic->file),</span> +<a id="line-397" name="line-397"></a><span class="cm"> NULL, NULL));</span> +<a id="line-398" name="line-398"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-399" name="line-399"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">emblems</span><span class="p">[</span><span class="n">emblem_code</span><span class="mi">-1</span><span class="p">]);</span><span class="w"></span> +<a id="line-400" name="line-400"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-401" name="line-401"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-402" name="line-402"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-403" name="line-403"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-404" name="line-404"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-405" name="line-405"></a> +<a id="line-406" name="line-406"></a><span class="w"> </span><span class="cm">/* complete the info request */</span><span class="w"></span> +<a id="line-407" name="line-407"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-408" name="line-408"></a><span class="w"> </span><span class="n">caja_info_provider_update_complete_invoke</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">,</span><span class="w"></span> +<a id="line-409" name="line-409"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-410" name="line-410"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">,</span><span class="w"></span> +<a id="line-411" name="line-411"></a><span class="w"> </span><span class="n">result</span><span class="p">);</span><span class="w"></span> +<a id="line-412" name="line-412"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-413" name="line-413"></a> +<a id="line-414" name="line-414"></a><span class="w"> </span><span class="cm">/* destroy the objects we created */</span><span class="w"></span> +<a id="line-415" name="line-415"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-416" name="line-416"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">);</span><span class="w"></span> +<a id="line-417" name="line-417"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-418" name="line-418"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">);</span><span class="w"></span> +<a id="line-419" name="line-419"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-420" name="line-420"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">);</span><span class="w"></span> +<a id="line-421" name="line-421"></a> +<a id="line-422" name="line-422"></a><span class="w"> </span><span class="cm">/* unref the objects we didn't create */</span><span class="w"></span> +<a id="line-423" name="line-423"></a><span class="w"> </span><span class="n">g_closure_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">);</span><span class="w"></span> +<a id="line-424" name="line-424"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-425" name="line-425"></a> +<a id="line-426" name="line-426"></a><span class="w"> </span><span class="cm">/* now free the structs */</span><span class="w"></span> +<a id="line-427" name="line-427"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">);</span><span class="w"></span> +<a id="line-428" name="line-428"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="p">);</span><span class="w"></span> +<a id="line-429" name="line-429"></a> +<a id="line-430" name="line-430"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-431" name="line-431"></a><span class="p">}</span><span class="w"></span> +<a id="line-432" name="line-432"></a> +<a id="line-433" name="line-433"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-434" name="line-434"></a><span class="nf">caja_dropbox_cancel_update</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-435" name="line-435"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-436" name="line-436"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">handle</span><span class="p">;</span><span class="w"></span> +<a id="line-437" name="line-437"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-438" name="line-438"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-439" name="line-439"></a><span class="p">}</span><span class="w"></span> +<a id="line-440" name="line-440"></a> +<a id="line-441" name="line-441"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-442" name="line-442"></a><span class="nf">menu_item_cb</span><span class="p">(</span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">,</span><span class="w"></span> +<a id="line-443" name="line-443"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-444" name="line-444"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">verb</span><span class="p">;</span><span class="w"></span> +<a id="line-445" name="line-445"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">;</span><span class="w"></span> +<a id="line-446" name="line-446"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dcac</span><span class="p">;</span><span class="w"></span> +<a id="line-447" name="line-447"></a> +<a id="line-448" name="line-448"></a><span class="w"> </span><span class="n">dcac</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-449" name="line-449"></a> +<a id="line-450" name="line-450"></a><span class="w"> </span><span class="cm">/* maybe these would be better passed in a container</span> +<a id="line-451" name="line-451"></a><span class="cm"> struct used as the userdata pointer, oh well this</span> +<a id="line-452" name="line-452"></a><span class="cm"> is how dave camp does it */</span><span class="w"></span> +<a id="line-453" name="line-453"></a><span class="w"> </span><span class="n">files</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">);</span><span class="w"></span> +<a id="line-454" name="line-454"></a><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">);</span><span class="w"></span> +<a id="line-455" name="line-455"></a> +<a id="line-456" name="line-456"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span><span class="w"></span> +<a id="line-457" name="line-457"></a> +<a id="line-458" name="line-458"></a><span class="w"> </span><span class="cm">/* build the argument list */</span><span class="w"></span> +<a id="line-459" name="line-459"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-460" name="line-460"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-461" name="line-461"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-462" name="line-462"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span><span class="w"></span> +<a id="line-463" name="line-463"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-464" name="line-464"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span><span class="w"></span> +<a id="line-465" name="line-465"></a><span class="w"> </span><span class="n">guint</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-466" name="line-466"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">li</span><span class="p">;</span><span class="w"></span> +<a id="line-467" name="line-467"></a> +<a id="line-468" name="line-468"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-469" name="line-469"></a> +<a id="line-470" name="line-470"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-471" name="line-471"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">CAJA_FILE_INFO</span><span class="p">(</span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">));</span><span class="w"></span> +<a id="line-472" name="line-472"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-473" name="line-473"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-474" name="line-474"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">path</span><span class="p">)</span><span class="w"></span> +<a id="line-475" name="line-475"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"></span> +<a id="line-476" name="line-476"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">path</span><span class="p">;</span><span class="w"></span> +<a id="line-477" name="line-477"></a><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-478" name="line-478"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-479" name="line-479"></a> +<a id="line-480" name="line-480"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"></span> +<a id="line-481" name="line-481"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"></span> +<a id="line-482" name="line-482"></a><span class="w"> </span><span class="n">arglist</span><span class="p">);</span><span class="w"></span> +<a id="line-483" name="line-483"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-484" name="line-484"></a> +<a id="line-485" name="line-485"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-486" name="line-486"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span><span class="w"></span> +<a id="line-487" name="line-487"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w"></span> +<a id="line-488" name="line-488"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">);</span><span class="w"></span> +<a id="line-489" name="line-489"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-490" name="line-490"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"verb"</span><span class="p">),</span><span class="w"> </span><span class="n">arglist</span><span class="p">);</span><span class="w"></span> +<a id="line-491" name="line-491"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-492" name="line-492"></a> +<a id="line-493" name="line-493"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_action"</span><span class="p">);</span><span class="w"></span> +<a id="line-494" name="line-494"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-495" name="line-495"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-496" name="line-496"></a> +<a id="line-497" name="line-497"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dcac</span><span class="p">);</span><span class="w"></span> +<a id="line-498" name="line-498"></a><span class="p">}</span><span class="w"></span> +<a id="line-499" name="line-499"></a> +<a id="line-500" name="line-500"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="nf">from_hex</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-501" name="line-501"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">isdigit</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">ch</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'0'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">tolower</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'a'</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"></span> +<a id="line-502" name="line-502"></a><span class="p">}</span><span class="w"></span> +<a id="line-503" name="line-503"></a> +<a id="line-504" name="line-504"></a><span class="c1">// decode in --> out, but dont fill more than n chars into out</span> +<a id="line-505" name="line-505"></a><span class="c1">// returns len of out if thing went well, -1 if n wasn't big enough</span> +<a id="line-506" name="line-506"></a><span class="c1">// can be used in place (whoa!)</span> +<a id="line-507" name="line-507"></a><span class="kt">int</span><span class="w"> </span><span class="nf">GhettoURLDecode</span><span class="p">(</span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-508" name="line-508"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">out_initial</span><span class="p">;</span><span class="w"></span> +<a id="line-509" name="line-509"></a> +<a id="line-510" name="line-510"></a><span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="n">out_initial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">out</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-511" name="line-511"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'%'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-512" name="line-512"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-513" name="line-513"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span><span class="w"></span> +<a id="line-514" name="line-514"></a><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"></span> +<a id="line-515" name="line-515"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-516" name="line-516"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-517" name="line-517"></a><span class="w"> </span><span class="c1">// Input string isn't well-formed</span> +<a id="line-518" name="line-518"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span> +<a id="line-519" name="line-519"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-520" name="line-520"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-521" name="line-521"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-522" name="line-522"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="p">;</span><span class="w"></span> +<a id="line-523" name="line-523"></a><span class="w"> </span><span class="n">in</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-524" name="line-524"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-525" name="line-525"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-526" name="line-526"></a> +<a id="line-527" name="line-527"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-528" name="line-528"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"></span> +<a id="line-529" name="line-529"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="p">;</span><span class="w"></span> +<a id="line-530" name="line-530"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-531" name="line-531"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span> +<a id="line-532" name="line-532"></a><span class="p">}</span><span class="w"></span> +<a id="line-533" name="line-533"></a> +<a id="line-534" name="line-534"></a><span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"></span> +<a id="line-535" name="line-535"></a><span class="nf">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">,</span><span class="w"></span> +<a id="line-536" name="line-536"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">menu</span><span class="p">,</span><span class="w"></span> +<a id="line-537" name="line-537"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">old_action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-538" name="line-538"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="p">,</span><span class="w"></span> +<a id="line-539" name="line-539"></a><span class="w"> </span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-540" name="line-540"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span><span class="w"></span> +<a id="line-541" name="line-541"></a><span class="p">{</span><span class="w"></span> +<a id="line-542" name="line-542"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-543" name="line-543"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-544" name="line-544"></a> +<a id="line-545" name="line-545"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-546" name="line-546"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">option_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"~"</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span><span class="w"></span> +<a id="line-547" name="line-547"></a><span class="w"> </span><span class="cm">/* if this is a valid string */</span><span class="w"></span> +<a id="line-548" name="line-548"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-549" name="line-549"></a><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-550" name="line-550"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span><span class="w"></span> +<a id="line-551" name="line-551"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"></span> +<a id="line-552" name="line-552"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-553" name="line-553"></a> +<a id="line-554" name="line-554"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"></span> +<a id="line-555" name="line-555"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_inner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span><span class="w"></span> +<a id="line-556" name="line-556"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span><span class="w"></span> +<a id="line-557" name="line-557"></a> +<a id="line-558" name="line-558"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_name</span><span class="p">));</span><span class="w"></span> +<a id="line-559" name="line-559"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">verb</span><span class="p">));</span><span class="w"></span> +<a id="line-560" name="line-560"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_inner</span><span class="p">));</span><span class="w"></span> +<a id="line-561" name="line-561"></a> +<a id="line-562" name="line-562"></a><span class="w"> </span><span class="c1">// If the inner section has a menu in it then we create a submenu. The verb will be ignored.</span> +<a id="line-563" name="line-563"></a><span class="w"> </span><span class="c1">// Otherwise add the verb to our map and add the menu item to the list.</span> +<a id="line-564" name="line-564"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="sc">'~'</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-565" name="line-565"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span><span class="w"></span> +<a id="line-566" name="line-566"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">suboptions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="s">"|"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span><span class="w"></span> +<a id="line-567" name="line-567"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span><span class="w"></span> +<a id="line-568" name="line-568"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">submenu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span><span class="w"></span> +<a id="line-569" name="line-569"></a> +<a id="line-570" name="line-570"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">);</span><span class="w"></span> +<a id="line-571" name="line-571"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="s">"::"</span><span class="p">);</span><span class="w"></span> +<a id="line-572" name="line-572"></a> +<a id="line-573" name="line-573"></a><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">suboptions</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">,</span><span class="w"> </span><span class="n">new_action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-574" name="line-574"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">);</span><span class="w"></span> +<a id="line-575" name="line-575"></a> +<a id="line-576" name="line-576"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"></span> +<a id="line-577" name="line-577"></a><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="s">""</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-578" name="line-578"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">);</span><span class="w"></span> +<a id="line-579" name="line-579"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-580" name="line-580"></a> +<a id="line-581" name="line-581"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">suboptions</span><span class="p">);</span><span class="w"></span> +<a id="line-582" name="line-582"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-583" name="line-583"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">submenu</span><span class="p">);</span><span class="w"></span> +<a id="line-584" name="line-584"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-585" name="line-585"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-586" name="line-586"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span><span class="w"></span> +<a id="line-587" name="line-587"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span><span class="w"></span> +<a id="line-588" name="line-588"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-589" name="line-589"></a> +<a id="line-590" name="line-590"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">);</span><span class="w"></span> +<a id="line-591" name="line-591"></a> +<a id="line-592" name="line-592"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">item_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'!'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-593" name="line-593"></a><span class="w"> </span><span class="n">item_name</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-594" name="line-594"></a><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-595" name="line-595"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-596" name="line-596"></a> +<a id="line-597" name="line-597"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-598" name="line-598"></a> +<a id="line-599" name="line-599"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-600" name="line-600"></a><span class="w"> </span><span class="cm">/* add the file metadata to this item */</span><span class="w"></span> +<a id="line-601" name="line-601"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">,</span><span class="w"></span> +<a id="line-602" name="line-602"></a><span class="w"> </span><span class="n">caja_file_info_list_copy</span><span class="w"> </span><span class="p">(</span><span class="n">files</span><span class="p">),</span><span class="w"></span> +<a id="line-603" name="line-603"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">caja_file_info_list_free</span><span class="p">);</span><span class="w"></span> +<a id="line-604" name="line-604"></a><span class="w"> </span><span class="cm">/* add the verb metadata */</span><span class="w"></span> +<a id="line-605" name="line-605"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">,</span><span class="w"></span> +<a id="line-606" name="line-606"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">),</span><span class="w"></span> +<a id="line-607" name="line-607"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span><span class="w"></span> +<a id="line-608" name="line-608"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="w"> </span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="s">"activate"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="w"> </span><span class="p">(</span><span class="n">menu_item_cb</span><span class="p">),</span><span class="w"> </span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-609" name="line-609"></a> +<a id="line-610" name="line-610"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">grayed_out</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-611" name="line-611"></a><span class="w"> </span><span class="n">GValue</span><span class="w"> </span><span class="n">sensitive</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-612" name="line-612"></a><span class="w"> </span><span class="n">g_value_init</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">G_TYPE_BOOLEAN</span><span class="p">);</span><span class="w"></span> +<a id="line-613" name="line-613"></a><span class="w"> </span><span class="n">g_value_set_boolean</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span><span class="w"></span> +<a id="line-614" name="line-614"></a><span class="w"> </span><span class="n">g_object_set_property</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"sensitive"</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">sensitive</span><span class="p">);</span><span class="w"></span> +<a id="line-615" name="line-615"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-616" name="line-616"></a> +<a id="line-617" name="line-617"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-618" name="line-618"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-619" name="line-619"></a><span class="w"> </span><span class="n">ret</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-620" name="line-620"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-621" name="line-621"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span><span class="w"></span> +<a id="line-622" name="line-622"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-623" name="line-623"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span><span class="w"></span> +<a id="line-624" name="line-624"></a><span class="p">}</span><span class="w"></span> +<a id="line-625" name="line-625"></a> +<a id="line-626" name="line-626"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-627" name="line-627"></a><span class="nf">get_file_items_callback</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"></span> +<a id="line-628" name="line-628"></a><span class="p">{</span><span class="w"></span> +<a id="line-629" name="line-629"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span><span class="w"></span> +<a id="line-630" name="line-630"></a> +<a id="line-631" name="line-631"></a><span class="w"> </span><span class="cm">/* queue_push doesn't accept NULL as a value so we create an empty hash table</span> +<a id="line-632" name="line-632"></a><span class="cm"> * if we got no response. */</span><span class="w"></span> +<a id="line-633" name="line-633"></a><span class="w"> </span><span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">response</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"></span> +<a id="line-634" name="line-634"></a><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">));</span><span class="w"></span> +<a id="line-635" name="line-635"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-636" name="line-636"></a><span class="p">}</span><span class="w"></span> +<a id="line-637" name="line-637"></a> +<a id="line-638" name="line-638"></a> +<a id="line-639" name="line-639"></a><span class="k">static</span><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="w"></span> +<a id="line-640" name="line-640"></a><span class="nf">caja_dropbox_get_file_items</span><span class="p">(</span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-641" name="line-641"></a><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">window</span><span class="p">,</span><span class="w"></span> +<a id="line-642" name="line-642"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span><span class="w"></span> +<a id="line-643" name="line-643"></a><span class="p">{</span><span class="w"></span> +<a id="line-644" name="line-644"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-645" name="line-645"></a><span class="cm"> * 1. Convert files to filenames.</span> +<a id="line-646" name="line-646"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-647" name="line-647"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">);</span><span class="w"></span> +<a id="line-648" name="line-648"></a> +<a id="line-649" name="line-649"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file_count</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"></span> +<a id="line-650" name="line-650"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-651" name="line-651"></a> +<a id="line-652" name="line-652"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-653" name="line-653"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-654" name="line-654"></a><span class="w"> </span><span class="n">GList</span><span class="o">*</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"></span> +<a id="line-655" name="line-655"></a> +<a id="line-656" name="line-656"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elem</span><span class="o">-></span><span class="n">next</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-657" name="line-657"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">elem</span><span class="o">-></span><span class="n">data</span><span class="p">);</span><span class="w"></span> +<a id="line-658" name="line-658"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename_un</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-659" name="line-659"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename_un</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-660" name="line-660"></a> +<a id="line-661" name="line-661"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-662" name="line-662"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span><span class="w"></span> +<a id="line-663" name="line-663"></a> +<a id="line-664" name="line-664"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-665" name="line-665"></a><span class="w"> </span><span class="cm">/* oooh, filename wasn't correctly encoded, or isn't a local file. */</span><span class="w"></span> +<a id="line-666" name="line-666"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-667" name="line-667"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-668" name="line-668"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-669" name="line-669"></a> +<a id="line-670" name="line-670"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-671" name="line-671"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-672" name="line-672"></a> +<a id="line-673" name="line-673"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_new_full</span><span class="p">((</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="n">g_hash_table_unref</span><span class="p">);</span><span class="w"></span> +<a id="line-674" name="line-674"></a> +<a id="line-675" name="line-675"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-676" name="line-676"></a><span class="cm"> * 2. Create a DropboxGeneralCommand to call "icon_overlay_context_options"</span> +<a id="line-677" name="line-677"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-678" name="line-678"></a> +<a id="line-679" name="line-679"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-680" name="line-680"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span><span class="w"></span> +<a id="line-681" name="line-681"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_options"</span><span class="p">);</span><span class="w"></span> +<a id="line-682" name="line-682"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-683" name="line-683"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-684" name="line-684"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-685" name="line-685"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span><span class="w"></span> +<a id="line-686" name="line-686"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"> </span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-687" name="line-687"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">get_file_items_callback</span><span class="p">;</span><span class="w"></span> +<a id="line-688" name="line-688"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_ref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-689" name="line-689"></a> +<a id="line-690" name="line-690"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-691" name="line-691"></a><span class="cm"> * 3. Queue it up for the helper thread to run it.</span> +<a id="line-692" name="line-692"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-693" name="line-693"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-694" name="line-694"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dgc</span><span class="p">);</span><span class="w"></span> +<a id="line-695" name="line-695"></a> +<a id="line-696" name="line-696"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-697" name="line-697"></a><span class="cm"> * 4. We have to block until it's done because caja expects a reply. But we will</span> +<a id="line-698" name="line-698"></a><span class="cm"> * only block for 50 ms for a reply.</span> +<a id="line-699" name="line-699"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-700" name="line-700"></a> +<a id="line-701" name="line-701"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">context_options_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="mi">50000</span><span class="p">);</span><span class="w"></span> +<a id="line-702" name="line-702"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-703" name="line-703"></a> +<a id="line-704" name="line-704"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">context_options_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-705" name="line-705"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-706" name="line-706"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-707" name="line-707"></a> +<a id="line-708" name="line-708"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-709" name="line-709"></a><span class="cm"> * 5. Parse the reply.</span> +<a id="line-710" name="line-710"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-711" name="line-711"></a> +<a id="line-712" name="line-712"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">,</span><span class="w"> </span><span class="s">"options"</span><span class="p">);</span><span class="w"></span> +<a id="line-713" name="line-713"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-714" name="line-714"></a> +<a id="line-715" name="line-715"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-716" name="line-716"></a><span class="w"> </span><span class="cm">/* build the menu */</span><span class="w"></span> +<a id="line-717" name="line-717"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">root_item</span><span class="p">;</span><span class="w"></span> +<a id="line-718" name="line-718"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">root_menu</span><span class="p">;</span><span class="w"></span> +<a id="line-719" name="line-719"></a> +<a id="line-720" name="line-720"></a><span class="w"> </span><span class="n">root_menu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span><span class="w"></span> +<a id="line-721" name="line-721"></a><span class="w"> </span><span class="n">root_item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="s">"CajaDropbox::root_item"</span><span class="p">,</span><span class="w"></span> +<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">"Dropbox"</span><span class="p">,</span><span class="w"> </span><span class="s">"Dropbox Options"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox"</span><span class="p">);</span><span class="w"></span> +<a id="line-723" name="line-723"></a> +<a id="line-724" name="line-724"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_append</span><span class="p">(</span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">root_item</span><span class="p">);</span><span class="w"></span> +<a id="line-725" name="line-725"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="s">"CajaDropbox::"</span><span class="p">);</span><span class="w"></span> +<a id="line-726" name="line-726"></a> +<a id="line-727" name="line-727"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">options</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">,</span><span class="w"> </span><span class="n">action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-728" name="line-728"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-729" name="line-729"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">toret</span><span class="p">);</span><span class="w"></span> +<a id="line-730" name="line-730"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-731" name="line-731"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-732" name="line-732"></a> +<a id="line-733" name="line-733"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">root_item</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">);</span><span class="w"></span> +<a id="line-734" name="line-734"></a> +<a id="line-735" name="line-735"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-736" name="line-736"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">root_menu</span><span class="p">);</span><span class="w"></span> +<a id="line-737" name="line-737"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-738" name="line-738"></a> +<a id="line-739" name="line-739"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">);</span><span class="w"></span> +<a id="line-740" name="line-740"></a> +<a id="line-741" name="line-741"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span><span class="w"></span> +<a id="line-742" name="line-742"></a><span class="p">}</span><span class="w"></span> +<a id="line-743" name="line-743"></a> +<a id="line-744" name="line-744"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-745" name="line-745"></a><span class="nf">add_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-746" name="line-746"></a><span class="p">{</span><span class="w"></span> +<a id="line-747" name="line-747"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-748" name="line-748"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-749" name="line-749"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-750" name="line-750"></a> +<a id="line-751" name="line-751"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="p">;</span><span class="w"></span> +<a id="line-752" name="line-752"></a><span class="hll"><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-753" name="line-753"></a> +<a id="line-754" name="line-754"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="n">theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span><span class="w"></span> +<a id="line-755" name="line-755"></a> +<a id="line-756" name="line-756"></a><span class="hll"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">&&</span><span class="w"></span><span class="error2"><--- Condition 'emblem_paths_response' is always true</span> +</span><a id="line-757" name="line-757"></a><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-758" name="line-758"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-759" name="line-759"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"></span> +<a id="line-760" name="line-760"></a><span class="w"> </span><span class="n">gtk_icon_theme_append_search_path</span><span class="p">(</span><span class="n">theme</span><span class="p">,</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-761" name="line-761"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-762" name="line-762"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-763" name="line-763"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-764" name="line-764"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-765" name="line-765"></a><span class="p">}</span><span class="w"></span> +<a id="line-766" name="line-766"></a> +<a id="line-767" name="line-767"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-768" name="line-768"></a><span class="nf">remove_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-769" name="line-769"></a><span class="p">{</span><span class="w"></span> +<a id="line-770" name="line-770"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-771" name="line-771"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-772" name="line-772"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-773" name="line-773"></a> +<a id="line-774" name="line-774"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">);</span><span class="w"></span> +<a id="line-775" name="line-775"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_list</span><span class="p">)</span><span class="w"></span> +<a id="line-776" name="line-776"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span><span class="w"></span> +<a id="line-777" name="line-777"></a> +<a id="line-778" name="line-778"></a><span class="w"> </span><span class="c1">// We need to remove the old paths.</span> +<a id="line-779" name="line-779"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">icon_theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span><span class="w"></span> +<a id="line-780" name="line-780"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="w"> </span><span class="n">paths</span><span class="p">;</span><span class="w"></span> +<a id="line-781" name="line-781"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"></span> +<a id="line-782" name="line-782"></a> +<a id="line-783" name="line-783"></a><span class="w"> </span><span class="n">gtk_icon_theme_get_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">path_count</span><span class="p">);</span><span class="w"></span> +<a id="line-784" name="line-784"></a> +<a id="line-785" name="line-785"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-786" name="line-786"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-787" name="line-787"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-788" name="line-788"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-789" name="line-789"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-790" name="line-790"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-791" name="line-791"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">g_strcmp0</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-792" name="line-792"></a><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-793" name="line-793"></a><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-794" name="line-794"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-795" name="line-795"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span><span class="w"></span> +<a id="line-796" name="line-796"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-797" name="line-797"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-798" name="line-798"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-799" name="line-799"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keep</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-800" name="line-800"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">];</span><span class="w"></span> +<a id="line-801" name="line-801"></a><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-802" name="line-802"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-803" name="line-803"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-804" name="line-804"></a> +<a id="line-805" name="line-805"></a><span class="w"> </span><span class="cm">/* If we found one we need to reset the path to</span> +<a id="line-806" name="line-806"></a><span class="cm"> accomodate the changes */</span><span class="w"></span> +<a id="line-807" name="line-807"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">found</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-808" name="line-808"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Clear the last one */</span><span class="w"></span> +<a id="line-809" name="line-809"></a><span class="w"> </span><span class="n">gtk_icon_theme_set_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="p">)</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="p">);</span><span class="w"></span> +<a id="line-810" name="line-810"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-811" name="line-811"></a> +<a id="line-812" name="line-812"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-813" name="line-813"></a><span class="nl">exit</span><span class="p">:</span><span class="w"></span> +<a id="line-814" name="line-814"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-815" name="line-815"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-816" name="line-816"></a><span class="p">}</span><span class="w"></span> +<a id="line-817" name="line-817"></a> +<a id="line-818" name="line-818"></a><span class="kt">void</span><span class="w"> </span><span class="nf">get_emblem_paths_cb</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"></span> +<a id="line-819" name="line-819"></a><span class="p">{</span><span class="w"></span> +<a id="line-820" name="line-820"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-821" name="line-821"></a><span class="w"> </span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-822" name="line-822"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">);</span><span class="w"></span> +<a id="line-823" name="line-823"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">,</span><span class="w"> </span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">);</span><span class="w"></span> +<a id="line-824" name="line-824"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-825" name="line-825"></a><span class="w"> </span><span class="cm">/* Increase the ref so that finish_general_command doesn't delete it. */</span><span class="w"></span> +<a id="line-826" name="line-826"></a><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-827" name="line-827"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-828" name="line-828"></a> +<a id="line-829" name="line-829"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-830" name="line-830"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-831" name="line-831"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span><span class="w"></span> +<a id="line-832" name="line-832"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-833" name="line-833"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-834" name="line-834"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">;</span><span class="w"></span> +<a id="line-835" name="line-835"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-836" name="line-836"></a> +<a id="line-837" name="line-837"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">add_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">));</span><span class="w"></span> +<a id="line-838" name="line-838"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_all_files</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-839" name="line-839"></a><span class="p">}</span><span class="w"></span> +<a id="line-840" name="line-840"></a> +<a id="line-841" name="line-841"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-842" name="line-842"></a><span class="nf">on_connect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-843" name="line-843"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-844" name="line-844"></a> +<a id="line-845" name="line-845"></a><span class="w"> </span><span class="n">dropbox_command_client_send_command</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"></span> +<a id="line-846" name="line-846"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)</span><span class="w"> </span><span class="n">get_emblem_paths_cb</span><span class="p">,</span><span class="w"></span> +<a id="line-847" name="line-847"></a><span class="hll"><span class="w"> </span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="s">"get_emblem_paths"</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. <span class="marker">[+]</span></span><div class="content">Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. +The C99 standard, in section 7.15.1.1, states that if the type used by va_arg() is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined. +The value of the NULL macro is an implementation-defined null pointer constant (7.17), which can be any integer constant expression with the value 0, or such an expression casted to (void*) (6.3.2.3). This includes values like 0, 0L, or even 0LL. +In practice on common architectures, this will cause real crashes if sizeof(int) != sizeof(void*), and NULL is defined to 0 or any other null pointer constant that promotes to int. +To reproduce you might be able to use this little code example on 64bit platforms. If the output includes "ERROR", the sentinel had only 4 out of 8 bytes initialized to zero and was not detected as the final argument to stop argument processing via va_arg(). Changing the 0 to (void*)0 or 0L will make the "ERROR" output go away. +#include <stdarg.h> +#include <stdio.h> + +void f(char *s, ...) { + va_list ap; + va_start(ap,s); + for (;;) { + char *p = va_arg(ap,char*); + printf("%018p, %s\n", p, (long)p & 255 ? p : ""); + if(!p) break; + } + va_end(ap); +} + +void g() { + char *s2 = "x"; + char *s3 = "ERROR"; + + // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64 + f("first", s2, s2, s2, s2, s2, 0, s3, (char*)0); +} + +void h() { + int i; + volatile unsigned char a[1000]; + for (i = 0; i<sizeof(a); i++) + a[i] = -1; +} + +int main() { + h(); + g(); + return 0; +}</div></div> +</span><a id="line-848" name="line-848"></a><span class="p">}</span><span class="w"></span> +<a id="line-849" name="line-849"></a> +<a id="line-850" name="line-850"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-851" name="line-851"></a><span class="nf">on_disconnect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-852" name="line-852"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-853" name="line-853"></a> +<a id="line-854" name="line-854"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-855" name="line-855"></a><span class="w"> </span><span class="cm">/* This call will free the data too. */</span><span class="w"></span> +<a id="line-856" name="line-856"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span><span class="w"></span> +<a id="line-857" name="line-857"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-858" name="line-858"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-859" name="line-859"></a><span class="p">}</span><span class="w"></span> +<a id="line-860" name="line-860"></a> +<a id="line-861" name="line-861"></a> +<a id="line-862" name="line-862"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-863" name="line-863"></a><span class="nf">caja_dropbox_menu_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaMenuProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-864" name="line-864"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">get_file_items</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_get_file_items</span><span class="p">;</span><span class="w"></span> +<a id="line-865" name="line-865"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-866" name="line-866"></a><span class="p">}</span><span class="w"></span> +<a id="line-867" name="line-867"></a> +<a id="line-868" name="line-868"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-869" name="line-869"></a><span class="nf">caja_dropbox_info_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaInfoProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-870" name="line-870"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">update_file_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_update_file_info</span><span class="p">;</span><span class="w"></span> +<a id="line-871" name="line-871"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">cancel_update</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_cancel_update</span><span class="p">;</span><span class="w"></span> +<a id="line-872" name="line-872"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-873" name="line-873"></a><span class="p">}</span><span class="w"></span> +<a id="line-874" name="line-874"></a> +<a id="line-875" name="line-875"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-876" name="line-876"></a><span class="nf">caja_dropbox_instance_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-877" name="line-877"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-878" name="line-878"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-879" name="line-879"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-880" name="line-880"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-881" name="line-881"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-882" name="line-882"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-883" name="line-883"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-884" name="line-884"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span><span class="w"></span> +<a id="line-885" name="line-885"></a><span class="w"> </span><span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-886" name="line-886"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-887" name="line-887"></a> +<a id="line-888" name="line-888"></a><span class="w"> </span><span class="cm">/* setup the connection obj*/</span><span class="w"></span> +<a id="line-889" name="line-889"></a><span class="w"> </span><span class="n">dropbox_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span><span class="w"></span> +<a id="line-890" name="line-890"></a> +<a id="line-891" name="line-891"></a><span class="w"> </span><span class="cm">/* our hooks */</span><span class="w"></span> +<a id="line-892" name="line-892"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span><span class="w"> </span><span class="s">"shell_touch"</span><span class="p">,</span><span class="w"></span> +<a id="line-893" name="line-893"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxUpdateHook</span><span class="p">)</span><span class="w"> </span><span class="n">handle_shell_touch</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-894" name="line-894"></a> +<a id="line-895" name="line-895"></a><span class="w"> </span><span class="cm">/* add connection handlers */</span><span class="w"></span> +<a id="line-896" name="line-896"></a><span class="w"> </span><span class="n">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span><span class="w"></span> +<a id="line-897" name="line-897"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_connect</span><span class="p">,</span><span class="w"></span> +<a id="line-898" name="line-898"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-899" name="line-899"></a><span class="w"> </span><span class="n">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span><span class="w"></span> +<a id="line-900" name="line-900"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_disconnect</span><span class="p">,</span><span class="w"></span> +<a id="line-901" name="line-901"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-902" name="line-902"></a> +<a id="line-903" name="line-903"></a><span class="w"> </span><span class="cm">/* now start the connection */</span><span class="w"></span> +<a id="line-904" name="line-904"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"about to start client connection"</span><span class="p">);</span><span class="w"></span> +<a id="line-905" name="line-905"></a><span class="w"> </span><span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span><span class="w"></span> +<a id="line-906" name="line-906"></a> +<a id="line-907" name="line-907"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-908" name="line-908"></a><span class="p">}</span><span class="w"></span> +<a id="line-909" name="line-909"></a> +<a id="line-910" name="line-910"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-911" name="line-911"></a><span class="nf">caja_dropbox_class_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-912" name="line-912"></a><span class="p">}</span><span class="w"></span> +<a id="line-913" name="line-913"></a> +<a id="line-914" name="line-914"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-915" name="line-915"></a><span class="nf">caja_dropbox_class_finalize</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-916" name="line-916"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"just checking"</span><span class="p">);</span><span class="w"></span> +<a id="line-917" name="line-917"></a><span class="w"> </span><span class="cm">/* kill threads here? */</span><span class="w"></span> +<a id="line-918" name="line-918"></a><span class="p">}</span><span class="w"></span> +<a id="line-919" name="line-919"></a> +<a id="line-920" name="line-920"></a><span class="n">GType</span><span class="w"></span> +<a id="line-921" name="line-921"></a><span class="nf">caja_dropbox_get_type</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-922" name="line-922"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_type</span><span class="p">;</span><span class="w"></span> +<a id="line-923" name="line-923"></a><span class="p">}</span><span class="w"></span> +<a id="line-924" name="line-924"></a> +<a id="line-925" name="line-925"></a><span class="kt">void</span><span class="w"></span> +<a id="line-926" name="line-926"></a><span class="nf">caja_dropbox_register_type</span><span class="w"> </span><span class="p">(</span><span class="n">GTypeModule</span><span class="w"> </span><span class="o">*</span><span class="n">module</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-927" name="line-927"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GTypeInfo</span><span class="w"> </span><span class="n">info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-928" name="line-928"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="p">),</span><span class="w"></span> +<a id="line-929" name="line-929"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseInitFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-930" name="line-930"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-931" name="line-931"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_init</span><span class="p">,</span><span class="w"></span> +<a id="line-932" name="line-932"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_finalize</span><span class="p">,</span><span class="w"></span> +<a id="line-933" name="line-933"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-934" name="line-934"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="p">),</span><span class="w"></span> +<a id="line-935" name="line-935"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"></span> +<a id="line-936" name="line-936"></a><span class="w"> </span><span class="p">(</span><span class="n">GInstanceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_instance_init</span><span class="p">,</span><span class="w"></span> +<a id="line-937" name="line-937"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-938" name="line-938"></a> +<a id="line-939" name="line-939"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">menu_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-940" name="line-940"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_menu_provider_iface_init</span><span class="p">,</span><span class="w"></span> +<a id="line-941" name="line-941"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-942" name="line-942"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-943" name="line-943"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-944" name="line-944"></a> +<a id="line-945" name="line-945"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">info_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-946" name="line-946"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_info_provider_iface_init</span><span class="p">,</span><span class="w"></span> +<a id="line-947" name="line-947"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-948" name="line-948"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-949" name="line-949"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-950" name="line-950"></a> +<a id="line-951" name="line-951"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"></span> +<a id="line-952" name="line-952"></a><span class="w"> </span><span class="n">g_type_module_register_type</span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-953" name="line-953"></a><span class="w"> </span><span class="n">G_TYPE_OBJECT</span><span class="p">,</span><span class="w"></span> +<a id="line-954" name="line-954"></a><span class="w"> </span><span class="s">"CajaDropbox"</span><span class="p">,</span><span class="w"></span> +<a id="line-955" name="line-955"></a><span class="w"> </span><span class="o">&</span><span class="n">info</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span> +<a id="line-956" name="line-956"></a> +<a id="line-957" name="line-957"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-958" name="line-958"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span><span class="w"></span> +<a id="line-959" name="line-959"></a><span class="w"> </span><span class="n">CAJA_TYPE_MENU_PROVIDER</span><span class="p">,</span><span class="w"></span> +<a id="line-960" name="line-960"></a><span class="w"> </span><span class="o">&</span><span class="n">menu_provider_iface_info</span><span class="p">);</span><span class="w"></span> +<a id="line-961" name="line-961"></a> +<a id="line-962" name="line-962"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-963" name="line-963"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span><span class="w"></span> +<a id="line-964" name="line-964"></a><span class="w"> </span><span class="n">CAJA_TYPE_INFO_PROVIDER</span><span class="p">,</span><span class="w"></span> +<a id="line-965" name="line-965"></a><span class="w"> </span><span class="o">&</span><span class="n">info_provider_iface_info</span><span class="p">);</span><span class="w"></span> +<a id="line-966" name="line-966"></a><span class="p">}</span><span class="w"></span> +</pre></div> +</td></tr></table> + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/index.html b/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/index.html new file mode 100644 index 0000000..2c87aae --- /dev/null +++ b/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/index.html @@ -0,0 +1,202 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox</h1> + <div id="filters"> + + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="error"disabled/>error</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="warning"disabled/>warning</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="portability"checked/>portability</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="performance"disabled/>performance</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="style"checked/>style</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="information"checked/>information</label> + | + <label class="checkBtn"><input type="checkbox" onclick="toggleTool(this)" id="cppcheck"checked/>cppcheck</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleTool(this)" id="clang-tidy"disabled/>clang-tidy</label> + | + <label class="severityHeader">File: <input type="text" oninput="filterFile(this.value)"/></label> + <label class="severityHeader">Filter: <input type="text" oninput="filterText(this.value)"/></label> + </div> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Defect summary</a> </p> + + <label><input type="checkbox" class="idToggle" onclick="toggleAll()" checked> Toggle all</label> + <table> + <tr><th>Show</th><th>#</th><th>Defect ID</th></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="variableScope" name="variableScope" checked></td><td>2</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>1</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="missingIncludeSystem" name="missingIncludeSystem" checked></td><td>1</td><td>missingIncludeSystem</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="varFuncNullUB" name="varFuncNullUB" checked></td><td>1</td><td>varFuncNullUB</td></tr> + <tr><td></td><td>5</td><td>total</td></tr> + </table> + <p><a href="stats.html">Statistics</a></p> + </div> + <div id="content_index"> + + <table class="summaryTable"> + <tr><th>Line</th><th>Id</th><th>CWE</th><th>Severity</th><th>Message</th></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="1.html"></a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Cppcheck cannot find all the include files (use --check-config for details)</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="0.html">src/caja-dropbox.c</a></td></tr> + <tr class="variableScope sev_style issue"><td><a href="0.html#line-312">312</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 'file' can be reduced.</td></tr> + <tr class="variableScope sev_style issue"><td><a href="0.html#line-752">752</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 'i' can be reduced.</td></tr> + <tr class="knownConditionTrueFalse sev_style issue"><td><a href="0.html#line-756">756</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td>Condition 'emblem_paths_response' is always true</td></tr> + <tr class="varFuncNullUB sev_portability issue"><td><a href="0.html#line-847">847</a></td><td>varFuncNullUB</td><td><a href="https://cwe.mitre.org/data/definitions/475.html">475</a></td><td>portability</td><td>Passing NULL after the last typed argument to a variadic function leads to undefined behaviour.</td></tr> + </tbody> + </table> + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/stats.html b/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/stats.html new file mode 100644 index 0000000..6f8dab3 --- /dev/null +++ b/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/stats.html @@ -0,0 +1,170 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: Statistics</h1> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Back to summary</a> </p> + + </div> + <div id="content_index"> +<p><span class="statHeader">Top 10 files for portability severity, total findings: 1</span><br> +   1 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> +<p><span class="statHeader">Top 10 files for style severity, total findings: 3</span><br> +   3 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/style.css b/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/style.css new file mode 100644 index 0000000..3897bfa --- /dev/null +++ b/2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/style.css @@ -0,0 +1,177 @@ + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; + font-size: 13px; + line-height: 1.5; + height: 100%; + margin: 0; +} + +#wrapper { + position: fixed; + height: 100vh; + width: 100vw; + display: grid; + grid-template-rows: fit-content(8rem) auto fit-content(8rem); + grid-template-columns: fit-content(25%) 1fr; + grid-template-areas: + "header header" + "menu content" + "footer footer"; +} + +h1 { + margin: 0 0 8px -2px; + font-size: 175%; +} + +.header { + padding: 0 0 5px 15px; + grid-area: header; + border-bottom: thin solid #aaa; +} + +.footer { + grid-area: footer; + border-top: thin solid #aaa; + font-size: 85%; + +} + +.footer > p { + margin: 4px; +} + +#menu, +#menu_index { + grid-area: menu; + text-align: left; + overflow: auto; + padding: 0 23px 15px 15px; + border-right: thin solid #aaa; + min-width: 200px; +} + +#menu > a { + display: block; + margin-left: 10px; + font-size: 12px; +} + +#content, +#content_index { + grid-area: content; + padding: 0px 5px 15px 15px; + overflow: auto; +} + +label { + white-space: nowrap; +} + +label.checkBtn.disabled { + color: #606060; + background: #e0e0e0; + font-style: italic; +} + +label.checkBtn, input[type="text"] { + border: 1px solid grey; + border-radius: 4px; + box-shadow: 1px 1px inset; + padding: 1px 5px; +} + +label.checkBtn { + white-space: nowrap; + background: #ccddff; +} + +label.unchecked { + background: #eff8ff; + box-shadow: 1px 1px 1px; +} + +label.checkBtn:hover, label.unchecked:hover{ + box-shadow: 0 0 2px; +} + +label.disabled:hover { + box-shadow: 1px 1px inset; +} + +label.checkBtn > input { + display:none; +} + +.summaryTable { + width: 100%; +} + +table.summaryTable td { padding: 0 5px 0 5px; } + +.statHeader, .severityHeader { + font-weight: bold; +} + +.warning { + background-color: #ffffa7; +} + +.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; + position: relative; + margin: -10px; +} + +.linenos { + border-right: thin solid #aaa; + color: #d3d3d3; + padding-right: 6px; +} + +.id-filtered, .severity-filtered, .file-filtered, .tool-filtered, .text-filtered { + visibility: collapse; +} diff --git a/2022-11-11-213923-5771-1@21f8797d992b_master/index.html b/2022-11-11-213923-5771-1@21f8797d992b_master/index.html new file mode 100644 index 0000000..9aa730f --- /dev/null +++ b/2022-11-11-213923-5771-1@21f8797d992b_master/index.html @@ -0,0 +1,94 @@ +<html> +<head> +<title>rootdir - scan-build results</title> +<link type="text/css" rel="stylesheet" href="scanview.css"/> +<script src="sorttable.js"></script> +<script language='javascript' type="text/javascript"> +function SetDisplay(RowClass, DisplayVal) +{ + var Rows = document.getElementsByTagName("tr"); + for ( var i = 0 ; i < Rows.length; ++i ) { + if (Rows[i].className == RowClass) { + Rows[i].style.display = DisplayVal; + } + } +} + +function CopyCheckedStateToCheckButtons(SummaryCheckButton) { + var Inputs = document.getElementsByTagName("input"); + for ( var i = 0 ; i < Inputs.length; ++i ) { + if (Inputs[i].type == "checkbox") { + if(Inputs[i] != SummaryCheckButton) { + Inputs[i].checked = SummaryCheckButton.checked; + Inputs[i].onclick(); + } + } + } +} + +function returnObjById( id ) { + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +var NumUnchecked = 0; + +function ToggleDisplay(CheckButton, ClassName) { + if (CheckButton.checked) { + SetDisplay(ClassName, ""); + if (--NumUnchecked == 0) { + returnObjById("AllBugsCheck").checked = true; + } + } + else { + SetDisplay(ClassName, "none"); + NumUnchecked++; + returnObjById("AllBugsCheck").checked = false; + } +} +</script> +<!-- SUMMARYENDHEAD --> +</head> +<body> +<h1>rootdir - scan-build results</h1> + +<table> +<tr><th>User:</th><td>root@eac87768ab40</td></tr> +<tr><th>Working Directory:</th><td>/rootdir</td></tr> +<tr><th>Command Line:</th><td>make -j 2</td></tr> +<tr><th>Clang Version:</th><td>clang version 14.0.5 (Fedora 14.0.5-1.fc36) +</td></tr> +<tr><th>Date:</th><td>Fri Nov 11 21:39:23 2022</td></tr> +</table> +<h2>Bug Summary</h2><table> +<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead> +<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">1</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr> +<tr><th>Logic error</th><th colspan=2></th></tr> +<tr><td class="SUMM_DESC">Cast from non-struct type to struct type</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_cast_from_non-struct_type_to_struct_type');" checked/></center></td></tr> +</table> +<h2>Reports</h2> + +<table class="sortable" style="table-layout:automatic"> +<thead><tr> + <td>Bug Group</td> + <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind"> ▾</span></td> + <td>File</td> + <td>Function/Method</td> + <td class="Q">Line</td> + <td class="Q">Path Length</td> + <td class="sorttable_nosort"></td> + <!-- REPORTBUGCOL --> +</tr></thead> +<tbody> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-1b9128.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-1b9128.html" --> +</tr> +</tbody> +</table> + +</body></html> diff --git a/2022-11-11-213923-5771-1@21f8797d992b_master/report-1b9128.html b/2022-11-11-213923-5771-1@21f8797d992b_master/report-1b9128.html new file mode 100644 index 0000000..7f2820e --- /dev/null +++ b/2022-11-11-213923-5771-1@21f8797d992b_master/report-1b9128.html @@ -0,0 +1,1553 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { position:relative } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.msg.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.5 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -D PIC -internal-isystem /usr/lib64/clang/14.0.5/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-11-11-213923-5771-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // SHIFT + S + if (event.shiftKey && event.keyCode == 83) { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].click(); + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> + <input type="checkbox" name="showArrows" + id="showArrows" style="margin-left: 10px" /> + <label for="showArrows"> + Show control flow arrows + </label> +</form> + +<script type='text/javascript'> +// Return range of numbers from a range [lower, upper). +function range(lower, upper) { + var array = []; + for (var i = lower; i <= upper; ++i) { + array.push(i); + } + return array; +} + +var getRelatedArrowIndices = function(pathId) { + // HTML numeration of events is a bit different than it is in the path. + // Everything is rotated one step to the right, so the last element + // (error diagnostic) has index 0. + if (pathId == 0) { + // arrowIndices has at least 2 elements + pathId = arrowIndices.length - 1; + } + + return range(arrowIndices[pathId], arrowIndices[pathId - 1]); +} + +var highlightArrowsForSelectedEvent = function() { + const selectedNum = findNum(); + const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum); + arrowIndicesToHighlight.forEach((index) => { + var arrow = document.querySelector("#arrow" + index); + if(arrow) { + classListAdd(arrow, "selected") + } + }); +} + +var getAbsoluteBoundingRect = function(element) { + const relative = element.getBoundingClientRect(); + return { + left: relative.left + window.pageXOffset, + right: relative.right + window.pageXOffset, + top: relative.top + window.pageYOffset, + bottom: relative.bottom + window.pageYOffset, + height: relative.height, + width: relative.width + }; +} + +var drawArrow = function(index) { + // This function is based on the great answer from SO: + // https://stackoverflow.com/a/39575674/11582326 + var start = document.querySelector("#start" + index); + var end = document.querySelector("#end" + index); + var arrow = document.querySelector("#arrow" + index); + + var startRect = getAbsoluteBoundingRect(start); + var endRect = getAbsoluteBoundingRect(end); + + // It is an arrow from a token to itself, no need to visualize it. + if (startRect.top == endRect.top && + startRect.left == endRect.left) + return; + + // Each arrow is a very simple Bézier curve, with two nodes and + // two handles. So, we need to calculate four points in the window: + // * start node + var posStart = { x: 0, y: 0 }; + // * end node + var posEnd = { x: 0, y: 0 }; + // * handle for the start node + var startHandle = { x: 0, y: 0 }; + // * handle for the end node + var endHandle = { x: 0, y: 0 }; + // One can visualize it as follows: + // + // start handle + // / + // X"""_.-""""X + // .' \ + // / start node + // | + // | + // | end node + // \ / + // `->X + // X-' + // \ + // end handle + // + // NOTE: (0, 0) is the top left corner of the window. + + // We have 3 similar, but still different scenarios to cover: + // + // 1. Two tokens on different lines. + // -xxx + // / + // \ + // -> xxx + // In this situation, we draw arrow on the left curving to the left. + // 2. Two tokens on the same line, and the destination is on the right. + // ____ + // / \ + // / V + // xxx xxx + // In this situation, we draw arrow above curving upwards. + // 3. Two tokens on the same line, and the destination is on the left. + // xxx xxx + // ^ / + // \____/ + // In this situation, we draw arrow below curving downwards. + const onDifferentLines = startRect.top <= endRect.top - 5 || + startRect.top >= endRect.top + 5; + const leftToRight = startRect.left < endRect.left; + + // NOTE: various magic constants are chosen empirically for + // better positioning and look + if (onDifferentLines) { + // Case #1 + const topToBottom = startRect.top < endRect.top; + posStart.x = startRect.left - 1; + // We don't want to start it at the top left corner of the token, + // it doesn't feel like this is where the arrow comes from. + // For this reason, we start it in the middle of the left side + // of the token. + posStart.y = startRect.top + startRect.height / 2; + + // End node has arrow head and we give it a bit more space. + posEnd.x = endRect.left - 4; + posEnd.y = endRect.top; + + // Utility object with x and y offsets for handles. + var curvature = { + // We want bottom-to-top arrow to curve a bit more, so it doesn't + // overlap much with top-to-bottom curves (much more frequent). + x: topToBottom ? 15 : 25, + y: Math.min((posEnd.y - posStart.y) / 3, 10) + } + + // When destination is on the different line, we can make a + // curvier arrow because we have space for it. + // So, instead of using + // + // startHandle.x = posStart.x - curvature.x + // endHandle.x = posEnd.x - curvature.x + // + // We use the leftmost of these two values for both handles. + startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x; + endHandle.x = startHandle.x; + + // Curving downwards from the start node... + startHandle.y = posStart.y + curvature.y; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else if (leftToRight) { + // Case #2 + // Starting from the top right corner... + posStart.x = startRect.right - 1; + posStart.y = startRect.top; + + // ...and ending at the top left corner of the end token. + posEnd.x = endRect.left + 1; + posEnd.y = endRect.top - 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posEnd.x - posStart.x) / 3, 15), + y: 5 + } + + // Curving to the right... + startHandle.x = posStart.x + curvature.x; + // ... and upwards from the start node. + startHandle.y = posStart.y - curvature.y; + + // And to the left... + endHandle.x = posEnd.x - curvature.x; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else { + // Case #3 + // Starting from the bottom right corner... + posStart.x = startRect.right; + posStart.y = startRect.bottom; + + // ...and ending also at the bottom right corner, but of the end token. + posEnd.x = endRect.right - 1; + posEnd.y = endRect.bottom + 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posStart.x - posEnd.x) / 3, 15), + y: 5 + } + + // Curving to the left... + startHandle.x = posStart.x - curvature.x; + // ... and downwards from the start node. + startHandle.y = posStart.y + curvature.y; + + // And to the right... + endHandle.x = posEnd.x + curvature.x; + // ... and downwards from the end node. + endHandle.y = posEnd.y + curvature.y; + } + + // Put it all together into a path. + // More information on the format: + // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths + var pathStr = "M" + posStart.x + "," + posStart.y + " " + + "C" + startHandle.x + "," + startHandle.y + " " + + endHandle.x + "," + endHandle.y + " " + + posEnd.x + "," + posEnd.y; + + arrow.setAttribute("d", pathStr); +}; + +var drawArrows = function() { + const numOfArrows = document.querySelectorAll("path[id^=arrow]").length; + for (var i = 0; i < numOfArrows; ++i) { + drawArrow(i); + } +} + +var toggleArrows = function(event) { + const arrows = document.querySelector("#arrows"); + if (event.target.checked) { + arrows.setAttribute("visibility", "visible"); + } else { + arrows.setAttribute("visibility", "hidden"); + } +} + +window.addEventListener("resize", drawArrows); +document.addEventListener("DOMContentLoaded", function() { + // Whenever we show invocation, locations change, i.e. we + // need to redraw arrows. + document + .querySelector('input[id="showinvocation"]') + .addEventListener("click", drawArrows); + // Hiding irrelevant lines also should cause arrow rerender. + document + .querySelector('input[name="showCounterexample"]') + .addEventListener("change", drawArrows); + document + .querySelector('input[name="showArrows"]') + .addEventListener("change", toggleArrows); + drawArrows(); + // Default highlighting for the last event. + highlightArrowsForSelectedEvent(); +}); +</script> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".msg.selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var classListAdd = function(el, theClass) { + if(!el.className.baseVal) + el.className += " " + theClass; + else + el.className.baseVal += " " + theClass; +}; + +var classListRemove = function(el, theClass) { + var className = (!el.className.baseVal) ? + el.className : el.className.baseVal; + className = className.replace(" " + theClass, ""); + if(!el.className.baseVal) + el.className = className; + else + el.className.baseVal = className; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + classListRemove(s, "selected"); + }); + classListAdd(el, "selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); + highlightArrowsForSelectedEvent(); +}; + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // key 'j' + if (event.keyCode == 74) { + navigateTo(/*up=*/false); + // key 'k' + } else if (event.keyCode == 75) { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> + +<style type="text/css"> + svg { + position:absolute; + top:0; + left:0; + height:100%; + width:100%; + pointer-events: none; + overflow: visible + } + .arrow { + stroke-opacity: 0.2; + stroke-width: 1; + marker-end: url(#arrowhead); + } + + .arrow.selected { + stroke-opacity: 0.6; + stroke-width: 2; + marker-end: url(#arrowheadSelected); + } + + .arrowhead { + orient: auto; + stroke: none; + opacity: 0.6; + fill: blue; + } +</style> +<svg xmlns="http://www.w3.org/2000/svg"> + <defs> + <marker id="arrowheadSelected" class="arrowhead" opacity="0.6" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + <marker id="arrowhead" class="arrowhead" opacity="0.2" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + </defs> + <g id="arrows" fill="none" stroke="blue" visibility="hidden"> + + </g> +</svg> +<script type='text/javascript'> +const arrowIndices = [ 0,0 ] +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2022-11-11-213923-5771-1@21f8797d992b_master/scanview.css b/2022-11-11-213923-5771-1@21f8797d992b_master/scanview.css new file mode 100644 index 0000000..cf8a5a6 --- /dev/null +++ b/2022-11-11-213923-5771-1@21f8797d992b_master/scanview.css @@ -0,0 +1,62 @@ +body { color:#000000; background-color:#ffffff } +body { font-family: Helvetica, sans-serif; font-size:9pt } +h1 { font-size: 14pt; } +h2 { font-size: 12pt; } +table { font-size:9pt } +table { border-spacing: 0px; border: 1px solid black } +th, table thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + font-weight: bold; font-family: Verdana; + white-space:nowrap; +} +.W { font-size:0px } +th, td { padding:5px; padding-left:8px; text-align:left } +td.SUMM_DESC { padding-left:12px } +td.DESC { white-space:pre } +td.Q { text-align:right } +td { text-align:left } +tbody.scrollContent { overflow:auto } + +table.form_group { + background-color: #ccc; + border: 1px solid #333; + padding: 2px; +} + +table.form_inner_group { + background-color: #ccc; + border: 1px solid #333; + padding: 0px; +} + +table.form { + background-color: #999; + border: 1px solid #333; + padding: 2px; +} + +td.form_label { + text-align: right; + vertical-align: top; +} +/* For one line entires */ +td.form_clabel { + text-align: right; + vertical-align: center; +} +td.form_value { + text-align: left; + vertical-align: top; +} +td.form_submit { + text-align: right; + vertical-align: top; +} + +h1.SubmitFail { + color: #f00; +} +h1.SubmitOk { +} diff --git a/2022-11-11-213923-5771-1@21f8797d992b_master/sorttable.js b/2022-11-11-213923-5771-1@21f8797d992b_master/sorttable.js new file mode 100644 index 0000000..32faa07 --- /dev/null +++ b/2022-11-11-213923-5771-1@21f8797d992b_master/sorttable.js @@ -0,0 +1,492 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backward compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + //row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[�$�]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; diff --git a/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/0.html b/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/0.html new file mode 100644 index 0000000..10d21ac --- /dev/null +++ b/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/0.html @@ -0,0 +1,2231 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/caja-dropbox.c</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> caja-dropbox.c</p> +<a href="0.html#line-312"> variableScope 312</a><a href="0.html#line-752"> variableScope 752</a><a href="0.html#line-756"> knownConditionTrueFalse 756</a><a href="0.html#line-847"> varFuncNullUB 847</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span> +<span class="normal">114</span> +<span class="normal">115</span> +<span class="normal">116</span> +<span class="normal">117</span> +<span class="normal">118</span> +<span class="normal">119</span> +<span class="normal">120</span> +<span class="normal">121</span> +<span class="normal">122</span> +<span class="normal">123</span> +<span class="normal">124</span> +<span class="normal">125</span> +<span class="normal">126</span> +<span class="normal">127</span> +<span class="normal">128</span> +<span class="normal">129</span> +<span class="normal">130</span> +<span class="normal">131</span> +<span class="normal">132</span> +<span class="normal">133</span> +<span class="normal">134</span> +<span class="normal">135</span> +<span class="normal">136</span> +<span class="normal">137</span> +<span class="normal">138</span> +<span class="normal">139</span> +<span class="normal">140</span> +<span class="normal">141</span> +<span class="normal">142</span> +<span class="normal">143</span> +<span class="normal">144</span> +<span class="normal">145</span> +<span class="normal">146</span> +<span class="normal">147</span> +<span class="normal">148</span> +<span class="normal">149</span> +<span class="normal">150</span> +<span class="normal">151</span> +<span class="normal">152</span> +<span class="normal">153</span> +<span class="normal">154</span> +<span class="normal">155</span> +<span class="normal">156</span> +<span class="normal">157</span> +<span class="normal">158</span> +<span class="normal">159</span> +<span class="normal">160</span> +<span class="normal">161</span> +<span class="normal">162</span> +<span class="normal">163</span> +<span class="normal">164</span> +<span class="normal">165</span> +<span class="normal">166</span> +<span class="normal">167</span> +<span class="normal">168</span> +<span class="normal">169</span> +<span class="normal">170</span> +<span class="normal">171</span> +<span class="normal">172</span> +<span class="normal">173</span> +<span class="normal">174</span> +<span class="normal">175</span> +<span class="normal">176</span> +<span class="normal">177</span> +<span class="normal">178</span> +<span class="normal">179</span> +<span class="normal">180</span> +<span class="normal">181</span> +<span class="normal">182</span> +<span class="normal">183</span> +<span class="normal">184</span> +<span class="normal">185</span> +<span class="normal">186</span> +<span class="normal">187</span> +<span class="normal">188</span> +<span class="normal">189</span> +<span class="normal">190</span> +<span class="normal">191</span> +<span class="normal">192</span> +<span class="normal">193</span> +<span class="normal">194</span> +<span class="normal">195</span> +<span class="normal">196</span> +<span class="normal">197</span> +<span class="normal">198</span> +<span class="normal">199</span> +<span class="normal">200</span> +<span class="normal">201</span> +<span class="normal">202</span> +<span class="normal">203</span> +<span class="normal">204</span> +<span class="normal">205</span> +<span class="normal">206</span> +<span class="normal">207</span> +<span class="normal">208</span> +<span class="normal">209</span> +<span class="normal">210</span> +<span class="normal">211</span> +<span class="normal">212</span> +<span class="normal">213</span> +<span class="normal">214</span> +<span class="normal">215</span> +<span class="normal">216</span> +<span class="normal">217</span> +<span class="normal">218</span> +<span class="normal">219</span> +<span class="normal">220</span> +<span class="normal">221</span> +<span class="normal">222</span> +<span class="normal">223</span> +<span class="normal">224</span> +<span class="normal">225</span> +<span class="normal">226</span> +<span class="normal">227</span> +<span class="normal">228</span> +<span class="normal">229</span> +<span class="normal">230</span> +<span class="normal">231</span> +<span class="normal">232</span> +<span class="normal">233</span> +<span class="normal">234</span> +<span class="normal">235</span> +<span class="normal">236</span> +<span class="normal">237</span> +<span class="normal">238</span> +<span class="normal">239</span> +<span class="normal">240</span> +<span class="normal">241</span> +<span class="normal">242</span> +<span class="normal">243</span> +<span class="normal">244</span> +<span class="normal">245</span> +<span class="normal">246</span> +<span class="normal">247</span> +<span class="normal">248</span> +<span class="normal">249</span> +<span class="normal">250</span> +<span class="normal">251</span> +<span class="normal">252</span> +<span class="normal">253</span> +<span class="normal">254</span> +<span class="normal">255</span> +<span class="normal">256</span> +<span class="normal">257</span> +<span class="normal">258</span> +<span class="normal">259</span> +<span class="normal">260</span> +<span class="normal">261</span> +<span class="normal">262</span> +<span class="normal">263</span> +<span class="normal">264</span> +<span class="normal">265</span> +<span class="normal">266</span> +<span class="normal">267</span> +<span class="normal">268</span> +<span class="normal">269</span> +<span class="normal">270</span> +<span class="normal">271</span> +<span class="normal">272</span> +<span class="normal">273</span> +<span class="normal">274</span> +<span class="normal">275</span> +<span class="normal">276</span> +<span class="normal">277</span> +<span class="normal">278</span> +<span class="normal">279</span> +<span class="normal">280</span> +<span class="normal">281</span> +<span class="normal">282</span> +<span class="normal">283</span> +<span class="normal">284</span> +<span class="normal">285</span> +<span class="normal">286</span> +<span class="normal">287</span> +<span class="normal">288</span> +<span class="normal">289</span> +<span class="normal">290</span> +<span class="normal">291</span> +<span class="normal">292</span> +<span class="normal">293</span> +<span class="normal">294</span> +<span class="normal">295</span> +<span class="normal">296</span> +<span class="normal">297</span> +<span class="normal">298</span> +<span class="normal">299</span> +<span class="normal">300</span> +<span class="normal">301</span> +<span class="normal">302</span> +<span class="normal">303</span> +<span class="normal">304</span> +<span class="normal">305</span> +<span class="normal">306</span> +<span class="normal">307</span> +<span class="normal">308</span> +<span class="normal">309</span> +<span class="normal">310</span> +<span class="normal">311</span> +<span class="normal">312</span> +<span class="normal">313</span> +<span class="normal">314</span> +<span class="normal">315</span> +<span class="normal">316</span> +<span class="normal">317</span> +<span class="normal">318</span> +<span class="normal">319</span> +<span class="normal">320</span> +<span class="normal">321</span> +<span class="normal">322</span> +<span class="normal">323</span> +<span class="normal">324</span> +<span class="normal">325</span> +<span class="normal">326</span> +<span class="normal">327</span> +<span class="normal">328</span> +<span class="normal">329</span> +<span class="normal">330</span> +<span class="normal">331</span> +<span class="normal">332</span> +<span class="normal">333</span> +<span class="normal">334</span> +<span class="normal">335</span> +<span class="normal">336</span> +<span class="normal">337</span> +<span class="normal">338</span> +<span class="normal">339</span> +<span class="normal">340</span> +<span class="normal">341</span> +<span class="normal">342</span> +<span class="normal">343</span> +<span class="normal">344</span> +<span class="normal">345</span> +<span class="normal">346</span> +<span class="normal">347</span> +<span class="normal">348</span> +<span class="normal">349</span> +<span class="normal">350</span> +<span class="normal">351</span> +<span class="normal">352</span> +<span class="normal">353</span> +<span class="normal">354</span> +<span class="normal">355</span> +<span class="normal">356</span> +<span class="normal">357</span> +<span class="normal">358</span> +<span class="normal">359</span> +<span class="normal">360</span> +<span class="normal">361</span> +<span class="normal">362</span> +<span class="normal">363</span> +<span class="normal">364</span> +<span class="normal">365</span> +<span class="normal">366</span> +<span class="normal">367</span> +<span class="normal">368</span> +<span class="normal">369</span> +<span class="normal">370</span> +<span class="normal">371</span> +<span class="normal">372</span> +<span class="normal">373</span> +<span class="normal">374</span> +<span class="normal">375</span> +<span class="normal">376</span> +<span class="normal">377</span> +<span class="normal">378</span> +<span class="normal">379</span> +<span class="normal">380</span> +<span class="normal">381</span> +<span class="normal">382</span> +<span class="normal">383</span> +<span class="normal">384</span> +<span class="normal">385</span> +<span class="normal">386</span> +<span class="normal">387</span> +<span class="normal">388</span> +<span class="normal">389</span> +<span class="normal">390</span> +<span class="normal">391</span> +<span class="normal">392</span> +<span class="normal">393</span> +<span class="normal">394</span> +<span class="normal">395</span> +<span class="normal">396</span> +<span class="normal">397</span> +<span class="normal">398</span> +<span class="normal">399</span> +<span class="normal">400</span> +<span class="normal">401</span> +<span class="normal">402</span> +<span class="normal">403</span> +<span class="normal">404</span> +<span class="normal">405</span> +<span class="normal">406</span> +<span class="normal">407</span> +<span class="normal">408</span> +<span class="normal">409</span> +<span class="normal">410</span> +<span class="normal">411</span> +<span class="normal">412</span> +<span class="normal">413</span> +<span class="normal">414</span> +<span class="normal">415</span> +<span class="normal">416</span> +<span class="normal">417</span> +<span class="normal">418</span> +<span class="normal">419</span> +<span class="normal">420</span> +<span class="normal">421</span> +<span class="normal">422</span> +<span class="normal">423</span> +<span class="normal">424</span> +<span class="normal">425</span> +<span class="normal">426</span> +<span class="normal">427</span> +<span class="normal">428</span> +<span class="normal">429</span> +<span class="normal">430</span> +<span class="normal">431</span> +<span class="normal">432</span> +<span class="normal">433</span> +<span class="normal">434</span> +<span class="normal">435</span> +<span class="normal">436</span> +<span class="normal">437</span> +<span class="normal">438</span> +<span class="normal">439</span> +<span class="normal">440</span> +<span class="normal">441</span> +<span class="normal">442</span> +<span class="normal">443</span> +<span class="normal">444</span> +<span class="normal">445</span> +<span class="normal">446</span> +<span class="normal">447</span> +<span class="normal">448</span> +<span class="normal">449</span> +<span class="normal">450</span> +<span class="normal">451</span> +<span class="normal">452</span> +<span class="normal">453</span> +<span class="normal">454</span> +<span class="normal">455</span> +<span class="normal">456</span> +<span class="normal">457</span> +<span class="normal">458</span> +<span class="normal">459</span> +<span class="normal">460</span> +<span class="normal">461</span> +<span class="normal">462</span> +<span class="normal">463</span> +<span class="normal">464</span> +<span class="normal">465</span> +<span class="normal">466</span> +<span class="normal">467</span> +<span class="normal">468</span> +<span class="normal">469</span> +<span class="normal">470</span> +<span class="normal">471</span> +<span class="normal">472</span> +<span class="normal">473</span> +<span class="normal">474</span> +<span class="normal">475</span> +<span class="normal">476</span> +<span class="normal">477</span> +<span class="normal">478</span> +<span class="normal">479</span> +<span class="normal">480</span> +<span class="normal">481</span> +<span class="normal">482</span> +<span class="normal">483</span> +<span class="normal">484</span> +<span class="normal">485</span> +<span class="normal">486</span> +<span class="normal">487</span> +<span class="normal">488</span> +<span class="normal">489</span> +<span class="normal">490</span> +<span class="normal">491</span> +<span class="normal">492</span> +<span class="normal">493</span> +<span class="normal">494</span> +<span class="normal">495</span> +<span class="normal">496</span> +<span class="normal">497</span> +<span class="normal">498</span> +<span class="normal">499</span> +<span class="normal">500</span> +<span class="normal">501</span> +<span class="normal">502</span> +<span class="normal">503</span> +<span class="normal">504</span> +<span class="normal">505</span> +<span class="normal">506</span> +<span class="normal">507</span> +<span class="normal">508</span> +<span class="normal">509</span> +<span class="normal">510</span> +<span class="normal">511</span> +<span class="normal">512</span> +<span class="normal">513</span> +<span class="normal">514</span> +<span class="normal">515</span> +<span class="normal">516</span> +<span class="normal">517</span> +<span class="normal">518</span> +<span class="normal">519</span> +<span class="normal">520</span> +<span class="normal">521</span> +<span class="normal">522</span> +<span class="normal">523</span> +<span class="normal">524</span> +<span class="normal">525</span> +<span class="normal">526</span> +<span class="normal">527</span> +<span class="normal">528</span> +<span class="normal">529</span> +<span class="normal">530</span> +<span class="normal">531</span> +<span class="normal">532</span> +<span class="normal">533</span> +<span class="normal">534</span> +<span class="normal">535</span> +<span class="normal">536</span> +<span class="normal">537</span> +<span class="normal">538</span> +<span class="normal">539</span> +<span class="normal">540</span> +<span class="normal">541</span> +<span class="normal">542</span> +<span class="normal">543</span> +<span class="normal">544</span> +<span class="normal">545</span> +<span class="normal">546</span> +<span class="normal">547</span> +<span class="normal">548</span> +<span class="normal">549</span> +<span class="normal">550</span> +<span class="normal">551</span> +<span class="normal">552</span> +<span class="normal">553</span> +<span class="normal">554</span> +<span class="normal">555</span> +<span class="normal">556</span> +<span class="normal">557</span> +<span class="normal">558</span> +<span class="normal">559</span> +<span class="normal">560</span> +<span class="normal">561</span> +<span class="normal">562</span> +<span class="normal">563</span> +<span class="normal">564</span> +<span class="normal">565</span> +<span class="normal">566</span> +<span class="normal">567</span> +<span class="normal">568</span> +<span class="normal">569</span> +<span class="normal">570</span> +<span class="normal">571</span> +<span class="normal">572</span> +<span class="normal">573</span> +<span class="normal">574</span> +<span class="normal">575</span> +<span class="normal">576</span> +<span class="normal">577</span> +<span class="normal">578</span> +<span class="normal">579</span> +<span class="normal">580</span> +<span class="normal">581</span> +<span class="normal">582</span> +<span class="normal">583</span> +<span class="normal">584</span> +<span class="normal">585</span> +<span class="normal">586</span> +<span class="normal">587</span> +<span class="normal">588</span> +<span class="normal">589</span> +<span class="normal">590</span> +<span class="normal">591</span> +<span class="normal">592</span> +<span class="normal">593</span> +<span class="normal">594</span> +<span class="normal">595</span> +<span class="normal">596</span> +<span class="normal">597</span> +<span class="normal">598</span> +<span class="normal">599</span> +<span class="normal">600</span> +<span class="normal">601</span> +<span class="normal">602</span> +<span class="normal">603</span> +<span class="normal">604</span> +<span class="normal">605</span> +<span class="normal">606</span> +<span class="normal">607</span> +<span class="normal">608</span> +<span class="normal">609</span> +<span class="normal">610</span> +<span class="normal">611</span> +<span class="normal">612</span> +<span class="normal">613</span> +<span class="normal">614</span> +<span class="normal">615</span> +<span class="normal">616</span> +<span class="normal">617</span> +<span class="normal">618</span> +<span class="normal">619</span> +<span class="normal">620</span> +<span class="normal">621</span> +<span class="normal">622</span> +<span class="normal">623</span> +<span class="normal">624</span> +<span class="normal">625</span> +<span class="normal">626</span> +<span class="normal">627</span> +<span class="normal">628</span> +<span class="normal">629</span> +<span class="normal">630</span> +<span class="normal">631</span> +<span class="normal">632</span> +<span class="normal">633</span> +<span class="normal">634</span> +<span class="normal">635</span> +<span class="normal">636</span> +<span class="normal">637</span> +<span class="normal">638</span> +<span class="normal">639</span> +<span class="normal">640</span> +<span class="normal">641</span> +<span class="normal">642</span> +<span class="normal">643</span> +<span class="normal">644</span> +<span class="normal">645</span> +<span class="normal">646</span> +<span class="normal">647</span> +<span class="normal">648</span> +<span class="normal">649</span> +<span class="normal">650</span> +<span class="normal">651</span> +<span class="normal">652</span> +<span class="normal">653</span> +<span class="normal">654</span> +<span class="normal">655</span> +<span class="normal">656</span> +<span class="normal">657</span> +<span class="normal">658</span> +<span class="normal">659</span> +<span class="normal">660</span> +<span class="normal">661</span> +<span class="normal">662</span> +<span class="normal">663</span> +<span class="normal">664</span> +<span class="normal">665</span> +<span class="normal">666</span> +<span class="normal">667</span> +<span class="normal">668</span> +<span class="normal">669</span> +<span class="normal">670</span> +<span class="normal">671</span> +<span class="normal">672</span> +<span class="normal">673</span> +<span class="normal">674</span> +<span class="normal">675</span> +<span class="normal">676</span> +<span class="normal">677</span> +<span class="normal">678</span> +<span class="normal">679</span> +<span class="normal">680</span> +<span class="normal">681</span> +<span class="normal">682</span> +<span class="normal">683</span> +<span class="normal">684</span> +<span class="normal">685</span> +<span class="normal">686</span> +<span class="normal">687</span> +<span class="normal">688</span> +<span class="normal">689</span> +<span class="normal">690</span> +<span class="normal">691</span> +<span class="normal">692</span> +<span class="normal">693</span> +<span class="normal">694</span> +<span class="normal">695</span> +<span class="normal">696</span> +<span class="normal">697</span> +<span class="normal">698</span> +<span class="normal">699</span> +<span class="normal">700</span> +<span class="normal">701</span> +<span class="normal">702</span> +<span class="normal">703</span> +<span class="normal">704</span> +<span class="normal">705</span> +<span class="normal">706</span> +<span class="normal">707</span> +<span class="normal">708</span> +<span class="normal">709</span> +<span class="normal">710</span> +<span class="normal">711</span> +<span class="normal">712</span> +<span class="normal">713</span> +<span class="normal">714</span> +<span class="normal">715</span> +<span class="normal">716</span> +<span class="normal">717</span> +<span class="normal">718</span> +<span class="normal">719</span> +<span class="normal">720</span> +<span class="normal">721</span> +<span class="normal">722</span> +<span class="normal">723</span> +<span class="normal">724</span> +<span class="normal">725</span> +<span class="normal">726</span> +<span class="normal">727</span> +<span class="normal">728</span> +<span class="normal">729</span> +<span class="normal">730</span> +<span class="normal">731</span> +<span class="normal">732</span> +<span class="normal">733</span> +<span class="normal">734</span> +<span class="normal">735</span> +<span class="normal">736</span> +<span class="normal">737</span> +<span class="normal">738</span> +<span class="normal">739</span> +<span class="normal">740</span> +<span class="normal">741</span> +<span class="normal">742</span> +<span class="normal">743</span> +<span class="normal">744</span> +<span class="normal">745</span> +<span class="normal">746</span> +<span class="normal">747</span> +<span class="normal">748</span> +<span class="normal">749</span> +<span class="normal">750</span> +<span class="normal">751</span> +<span class="normal">752</span> +<span class="normal">753</span> +<span class="normal">754</span> +<span class="normal">755</span> +<span class="normal">756</span> +<span class="normal">757</span> +<span class="normal">758</span> +<span class="normal">759</span> +<span class="normal">760</span> +<span class="normal">761</span> +<span class="normal">762</span> +<span class="normal">763</span> +<span class="normal">764</span> +<span class="normal">765</span> +<span class="normal">766</span> +<span class="normal">767</span> +<span class="normal">768</span> +<span class="normal">769</span> +<span class="normal">770</span> +<span class="normal">771</span> +<span class="normal">772</span> +<span class="normal">773</span> +<span class="normal">774</span> +<span class="normal">775</span> +<span class="normal">776</span> +<span class="normal">777</span> +<span class="normal">778</span> +<span class="normal">779</span> +<span class="normal">780</span> +<span class="normal">781</span> +<span class="normal">782</span> +<span class="normal">783</span> +<span class="normal">784</span> +<span class="normal">785</span> +<span class="normal">786</span> +<span class="normal">787</span> +<span class="normal">788</span> +<span class="normal">789</span> +<span class="normal">790</span> +<span class="normal">791</span> +<span class="normal">792</span> +<span class="normal">793</span> +<span class="normal">794</span> +<span class="normal">795</span> +<span class="normal">796</span> +<span class="normal">797</span> +<span class="normal">798</span> +<span class="normal">799</span> +<span class="normal">800</span> +<span class="normal">801</span> +<span class="normal">802</span> +<span class="normal">803</span> +<span class="normal">804</span> +<span class="normal">805</span> +<span class="normal">806</span> +<span class="normal">807</span> +<span class="normal">808</span> +<span class="normal">809</span> +<span class="normal">810</span> +<span class="normal">811</span> +<span class="normal">812</span> +<span class="normal">813</span> +<span class="normal">814</span> +<span class="normal">815</span> +<span class="normal">816</span> +<span class="normal">817</span> +<span class="normal">818</span> +<span class="normal">819</span> +<span class="normal">820</span> +<span class="normal">821</span> +<span class="normal">822</span> +<span class="normal">823</span> +<span class="normal">824</span> +<span class="normal">825</span> +<span class="normal">826</span> +<span class="normal">827</span> +<span class="normal">828</span> +<span class="normal">829</span> +<span class="normal">830</span> +<span class="normal">831</span> +<span class="normal">832</span> +<span class="normal">833</span> +<span class="normal">834</span> +<span class="normal">835</span> +<span class="normal">836</span> +<span class="normal">837</span> +<span class="normal">838</span> +<span class="normal">839</span> +<span class="normal">840</span> +<span class="normal">841</span> +<span class="normal">842</span> +<span class="normal">843</span> +<span class="normal">844</span> +<span class="normal">845</span> +<span class="normal">846</span> +<span class="normal">847</span> +<span class="normal">848</span> +<span class="normal">849</span> +<span class="normal">850</span> +<span class="normal">851</span> +<span class="normal">852</span> +<span class="normal">853</span> +<span class="normal">854</span> +<span class="normal">855</span> +<span class="normal">856</span> +<span class="normal">857</span> +<span class="normal">858</span> +<span class="normal">859</span> +<span class="normal">860</span> +<span class="normal">861</span> +<span class="normal">862</span> +<span class="normal">863</span> +<span class="normal">864</span> +<span class="normal">865</span> +<span class="normal">866</span> +<span class="normal">867</span> +<span class="normal">868</span> +<span class="normal">869</span> +<span class="normal">870</span> +<span class="normal">871</span> +<span class="normal">872</span> +<span class="normal">873</span> +<span class="normal">874</span> +<span class="normal">875</span> +<span class="normal">876</span> +<span class="normal">877</span> +<span class="normal">878</span> +<span class="normal">879</span> +<span class="normal">880</span> +<span class="normal">881</span> +<span class="normal">882</span> +<span class="normal">883</span> +<span class="normal">884</span> +<span class="normal">885</span> +<span class="normal">886</span> +<span class="normal">887</span> +<span class="normal">888</span> +<span class="normal">889</span> +<span class="normal">890</span> +<span class="normal">891</span> +<span class="normal">892</span> +<span class="normal">893</span> +<span class="normal">894</span> +<span class="normal">895</span> +<span class="normal">896</span> +<span class="normal">897</span> +<span class="normal">898</span> +<span class="normal">899</span> +<span class="normal">900</span> +<span class="normal">901</span> +<span class="normal">902</span> +<span class="normal">903</span> +<span class="normal">904</span> +<span class="normal">905</span> +<span class="normal">906</span> +<span class="normal">907</span> +<span class="normal">908</span> +<span class="normal">909</span> +<span class="normal">910</span> +<span class="normal">911</span> +<span class="normal">912</span> +<span class="normal">913</span> +<span class="normal">914</span> +<span class="normal">915</span> +<span class="normal">916</span> +<span class="normal">917</span> +<span class="normal">918</span> +<span class="normal">919</span> +<span class="normal">920</span> +<span class="normal">921</span> +<span class="normal">922</span> +<span class="normal">923</span> +<span class="normal">924</span> +<span class="normal">925</span> +<span class="normal">926</span> +<span class="normal">927</span> +<span class="normal">928</span> +<span class="normal">929</span> +<span class="normal">930</span> +<span class="normal">931</span> +<span class="normal">932</span> +<span class="normal">933</span> +<span class="normal">934</span> +<span class="normal">935</span> +<span class="normal">936</span> +<span class="normal">937</span> +<span class="normal">938</span> +<span class="normal">939</span> +<span class="normal">940</span> +<span class="normal">941</span> +<span class="normal">942</span> +<span class="normal">943</span> +<span class="normal">944</span> +<span class="normal">945</span> +<span class="normal">946</span> +<span class="normal">947</span> +<span class="normal">948</span> +<span class="normal">949</span> +<span class="normal">950</span> +<span class="normal">951</span> +<span class="normal">952</span> +<span class="normal">953</span> +<span class="normal">954</span> +<span class="normal">955</span> +<span class="normal">956</span> +<span class="normal">957</span> +<span class="normal">958</span> +<span class="normal">959</span> +<span class="normal">960</span> +<span class="normal">961</span> +<span class="normal">962</span> +<span class="normal">963</span> +<span class="normal">964</span> +<span class="normal">965</span> +<span class="normal">966</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * caja-dropbox.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Implements the Caja extension API for Dropbox.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><config.h></span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="cp"></span> +<a id="line-26" name="line-26"></a><span class="cp">#endif</span> +<a id="line-27" name="line-27"></a> +<a id="line-28" name="line-28"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span><span class="cp"></span> +<a id="line-29" name="line-29"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a id="line-30" name="line-30"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/un.h></span><span class="cp"></span> +<a id="line-31" name="line-31"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><errno.h></span><span class="cp"></span> +<a id="line-32" name="line-32"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><unistd.h></span><span class="cp"></span> +<a id="line-33" name="line-33"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><ctype.h></span><span class="cp"></span> +<a id="line-34" name="line-34"></a> +<a id="line-35" name="line-35"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="cp"></span> +<a id="line-36" name="line-36"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib/gprintf.h></span><span class="cp"></span> +<a id="line-37" name="line-37"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib-object.h></span><span class="cp"></span> +<a id="line-38" name="line-38"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtk.h></span><span class="cp"></span> +<a id="line-39" name="line-39"></a> +<a id="line-40" name="line-40"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-extension-types.h></span><span class="cp"></span> +<a id="line-41" name="line-41"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-menu-provider.h></span><span class="cp"></span> +<a id="line-42" name="line-42"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="cp"></span> +<a id="line-43" name="line-43"></a> +<a id="line-44" name="line-44"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"g-util.h"</span><span class="cp"></span> +<a id="line-45" name="line-45"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-command-client.h"</span><span class="cp"></span> +<a id="line-46" name="line-46"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox.h"</span><span class="cp"></span> +<a id="line-47" name="line-47"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a id="line-48" name="line-48"></a> +<a id="line-49" name="line-49"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">emblems</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s">"dropbox-uptodate"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-syncing"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-unsyncable"</span><span class="p">};</span><span class="w"></span> +<a id="line-50" name="line-50"></a><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">EMBLEMDIR</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-51" name="line-51"></a> +<a id="line-52" name="line-52"></a><span class="n">gboolean</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span><span class="w"></span> +<a id="line-53" name="line-53"></a> +<a id="line-54" name="line-54"></a><span class="k">static</span><span class="w"> </span><span class="n">GType</span><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-55" name="line-55"></a> +<a id="line-56" name="line-56"></a><span class="cm">/*</span> +<a id="line-57" name="line-57"></a><span class="cm"> Simplifies a path by removing navigation elements such as '.' and '..'</span> +<a id="line-58" name="line-58"></a> +<a id="line-59" name="line-59"></a><span class="cm"> Arguments:</span> +<a id="line-60" name="line-60"></a><span class="cm"> - path: input path to be canonicalized</span> +<a id="line-61" name="line-61"></a> +<a id="line-62" name="line-62"></a><span class="cm"> Returns:</span> +<a id="line-63" name="line-63"></a><span class="cm"> Canonicalized path if input path is valid.</span> +<a id="line-64" name="line-64"></a><span class="cm"> NULL otherwise.</span> +<a id="line-65" name="line-65"></a><span class="cm">*/</span><span class="w"></span> +<a id="line-66" name="line-66"></a><span class="k">static</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="w"></span> +<a id="line-67" name="line-67"></a><span class="nf">canonicalize_path</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-68" name="line-68"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-69" name="line-69"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-70" name="line-70"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">cpy</span><span class="p">,</span><span class="w"> </span><span class="o">**</span><span class="n">elts</span><span class="p">;</span><span class="w"></span> +<a id="line-71" name="line-71"></a> +<a id="line-72" name="line-72"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-73" name="line-73"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">);</span><span class="w"></span> +<a id="line-74" name="line-74"></a> +<a id="line-75" name="line-75"></a><span class="w"> </span><span class="n">elts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="s">"/"</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span> +<a id="line-76" name="line-76"></a><span class="w"> </span><span class="n">cpy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">g_strv_length</span><span class="p">(</span><span class="n">elts</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-77" name="line-77"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"/"</span><span class="p">;</span><span class="w"></span> +<a id="line-78" name="line-78"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-79" name="line-79"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">".."</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-80" name="line-80"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-81" name="line-81"></a><span class="w"> </span><span class="n">j</span><span class="o">--</span><span class="p">;</span><span class="w"></span> +<a id="line-82" name="line-82"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-83" name="line-83"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-84" name="line-84"></a><span class="w"> </span><span class="c1">// Input path has too many parent directory references and is invalid</span> +<a id="line-85" name="line-85"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-86" name="line-86"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span><span class="w"></span> +<a id="line-87" name="line-87"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-88" name="line-88"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-89" name="line-89"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"."</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-90" name="line-90"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">];</span><span class="w"></span> +<a id="line-91" name="line-91"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-92" name="line-92"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-93" name="line-93"></a> +<a id="line-94" name="line-94"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-95" name="line-95"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_build_filenamev</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span><span class="w"></span> +<a id="line-96" name="line-96"></a> +<a id="line-97" name="line-97"></a><span class="nl">exit</span><span class="p">:</span><span class="w"></span> +<a id="line-98" name="line-98"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span><span class="w"></span> +<a id="line-99" name="line-99"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">elts</span><span class="p">);</span><span class="w"></span> +<a id="line-100" name="line-100"></a> +<a id="line-101" name="line-101"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span><span class="w"></span> +<a id="line-102" name="line-102"></a><span class="p">}</span><span class="w"></span> +<a id="line-103" name="line-103"></a> +<a id="line-104" name="line-104"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-105" name="line-105"></a><span class="nf">reset_file</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-106" name="line-106"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"resetting file %p"</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-107" name="line-107"></a><span class="w"> </span><span class="n">caja_file_info_invalidate_extension_info</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-108" name="line-108"></a><span class="p">}</span><span class="w"></span> +<a id="line-109" name="line-109"></a> +<a id="line-110" name="line-110"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span><span class="w"></span> +<a id="line-111" name="line-111"></a><span class="nf">reset_all_files</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-112" name="line-112"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-113" name="line-113"></a> +<a id="line-114" name="line-114"></a><span class="w"> </span><span class="cm">/* this works because you can call a function pointer with</span> +<a id="line-115" name="line-115"></a><span class="cm"> more arguments than it takes */</span><span class="w"></span> +<a id="line-116" name="line-116"></a><span class="w"> </span><span class="n">g_hash_table_foreach</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GHFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_file</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-117" name="line-117"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-118" name="line-118"></a><span class="p">}</span><span class="w"></span> +<a id="line-119" name="line-119"></a> +<a id="line-120" name="line-120"></a> +<a id="line-121" name="line-121"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-122" name="line-122"></a><span class="nf">when_file_dies</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">address</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-123" name="line-123"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-124" name="line-124"></a> +<a id="line-125" name="line-125"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span><span class="w"></span> +<a id="line-126" name="line-126"></a> +<a id="line-127" name="line-127"></a><span class="w"> </span><span class="cm">/* we never got a change to view this file */</span><span class="w"></span> +<a id="line-128" name="line-128"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-129" name="line-129"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-130" name="line-130"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-131" name="line-131"></a> +<a id="line-132" name="line-132"></a><span class="w"> </span><span class="cm">/* too chatty */</span><span class="w"></span> +<a id="line-133" name="line-133"></a><span class="w"> </span><span class="cm">/* debug("removing %s <-> 0x%p", filename, address); */</span><span class="w"></span> +<a id="line-134" name="line-134"></a> +<a id="line-135" name="line-135"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-136" name="line-136"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span><span class="w"></span> +<a id="line-137" name="line-137"></a><span class="p">}</span><span class="w"></span> +<a id="line-138" name="line-138"></a> +<a id="line-139" name="line-139"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-140" name="line-140"></a><span class="nf">changed_cb</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-141" name="line-141"></a><span class="w"> </span><span class="cm">/* check if this file's path has changed, if so update the hash and invalidate</span> +<a id="line-142" name="line-142"></a><span class="cm"> the file */</span><span class="w"></span> +<a id="line-143" name="line-143"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">;</span><span class="w"></span> +<a id="line-144" name="line-144"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename2</span><span class="p">;</span><span class="w"></span> +<a id="line-145" name="line-145"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span><span class="w"></span> +<a id="line-146" name="line-146"></a> +<a id="line-147" name="line-147"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-148" name="line-148"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-149" name="line-149"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-150" name="line-150"></a> +<a id="line-151" name="line-151"></a><span class="w"> </span><span class="cm">/* Canonicalization will only null-out a non-null filename if it is invalid */</span><span class="w"></span> +<a id="line-152" name="line-152"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">((</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">));</span><span class="w"></span> +<a id="line-153" name="line-153"></a> +<a id="line-154" name="line-154"></a><span class="w"> </span><span class="n">filename2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-155" name="line-155"></a> +<a id="line-156" name="line-156"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-157" name="line-157"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-158" name="line-158"></a> +<a id="line-159" name="line-159"></a><span class="w"> </span><span class="cm">/* if filename2 is NULL we've never seen this file in update_file_info */</span><span class="w"></span> +<a id="line-160" name="line-160"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-161" name="line-161"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-162" name="line-162"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-163" name="line-163"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-164" name="line-164"></a> +<a id="line-165" name="line-165"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-166" name="line-166"></a><span class="w"> </span><span class="cm">/* A file has moved to offline storage. Lets remove it from our tables. */</span><span class="w"></span> +<a id="line-167" name="line-167"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-168" name="line-168"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span><span class="w"></span> +<a id="line-169" name="line-169"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-170" name="line-170"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-171" name="line-171"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-172" name="line-172"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-173" name="line-173"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-174" name="line-174"></a> +<a id="line-175" name="line-175"></a><span class="w"> </span><span class="cm">/* this is a hack, because caja doesn't do this for us, for some reason</span> +<a id="line-176" name="line-176"></a><span class="cm"> the file's path has changed */</span><span class="w"></span> +<a id="line-177" name="line-177"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-178" name="line-178"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shifty old: %s, new %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-179" name="line-179"></a> +<a id="line-180" name="line-180"></a><span class="w"> </span><span class="cm">/* gotta do this first, the call after this frees filename2 */</span><span class="w"></span> +<a id="line-181" name="line-181"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span><span class="w"></span> +<a id="line-182" name="line-182"></a> +<a id="line-183" name="line-183"></a><span class="w"> </span><span class="n">g_hash_table_replace</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span><span class="w"></span> +<a id="line-184" name="line-184"></a> +<a id="line-185" name="line-185"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-186" name="line-186"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span><span class="w"></span> +<a id="line-187" name="line-187"></a><span class="w"> </span><span class="cm">/* we shouldn't have another mapping from filename to an object */</span><span class="w"></span> +<a id="line-188" name="line-188"></a><span class="w"> </span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-189" name="line-189"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">f2</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-190" name="line-190"></a><span class="w"> </span><span class="cm">/* lets fix it if it's true, just remove the mapping */</span><span class="w"></span> +<a id="line-191" name="line-191"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-192" name="line-192"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span><span class="w"></span> +<a id="line-193" name="line-193"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-194" name="line-194"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-195" name="line-195"></a> +<a id="line-196" name="line-196"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-197" name="line-197"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-198" name="line-198"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-199" name="line-199"></a> +<a id="line-200" name="line-200"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-201" name="line-201"></a><span class="p">}</span><span class="w"></span> +<a id="line-202" name="line-202"></a> +<a id="line-203" name="line-203"></a><span class="k">static</span><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"></span> +<a id="line-204" name="line-204"></a><span class="nf">caja_dropbox_update_file_info</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-205" name="line-205"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"></span> +<a id="line-206" name="line-206"></a><span class="w"> </span><span class="n">GClosure</span><span class="w"> </span><span class="o">*</span><span class="n">update_complete</span><span class="p">,</span><span class="w"></span> +<a id="line-207" name="line-207"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">**</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-208" name="line-208"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">;</span><span class="w"></span> +<a id="line-209" name="line-209"></a> +<a id="line-210" name="line-210"></a><span class="w"> </span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-211" name="line-211"></a> +<a id="line-212" name="line-212"></a><span class="w"> </span><span class="cm">/* this code adds this file object to our two-way hash of file objects</span> +<a id="line-213" name="line-213"></a><span class="cm"> so we can shell touch these files later */</span><span class="w"></span> +<a id="line-214" name="line-214"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-215" name="line-215"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span><span class="w"></span> +<a id="line-216" name="line-216"></a> +<a id="line-217" name="line-217"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-218" name="line-218"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-219" name="line-219"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-220" name="line-220"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-221" name="line-221"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-222" name="line-222"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-223" name="line-223"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-224" name="line-224"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-225" name="line-225"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">stored_filename</span><span class="p">;</span><span class="w"></span> +<a id="line-226" name="line-226"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-227" name="line-227"></a> +<a id="line-228" name="line-228"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-229" name="line-229"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-230" name="line-230"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-231" name="line-231"></a><span class="w"> </span><span class="cm">/* pfilename path was invalid if canonicalize operation nulled it out */</span><span class="w"></span> +<a id="line-232" name="line-232"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span><span class="w"></span> +<a id="line-233" name="line-233"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-234" name="line-234"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-235" name="line-235"></a> +<a id="line-236" name="line-236"></a><span class="w"> </span><span class="cm">/* don't worry about the dup checks, gcc is smart enough to optimize this</span> +<a id="line-237" name="line-237"></a><span class="cm"> GCSE ftw */</span><span class="w"></span> +<a id="line-238" name="line-238"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">strcmp</span><span class="p">(</span><span class="n">stored_filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-239" name="line-239"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-240" name="line-240"></a> +<a id="line-241" name="line-241"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-242" name="line-242"></a><span class="w"> </span><span class="cm">/* this happens when the filename changes name on a file obj</span> +<a id="line-243" name="line-243"></a><span class="cm"> but changed_cb isn't called */</span><span class="w"></span> +<a id="line-244" name="line-244"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-245" name="line-245"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-246" name="line-246"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">stored_filename</span><span class="p">);</span><span class="w"></span> +<a id="line-247" name="line-247"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-248" name="line-248"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-249" name="line-249"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-250" name="line-250"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span><span class="w"></span> +<a id="line-251" name="line-251"></a> +<a id="line-252" name="line-252"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-253" name="line-253"></a><span class="w"> </span><span class="cm">/* if the filename exists in the filename2obj hash</span> +<a id="line-254" name="line-254"></a><span class="cm"> but the file obj doesn't exist in the obj2filename hash:</span> +<a id="line-255" name="line-255"></a> +<a id="line-256" name="line-256"></a><span class="cm"> this happens when caja allocates another file object</span> +<a id="line-257" name="line-257"></a><span class="cm"> for a filename without first deleting the original file object</span> +<a id="line-258" name="line-258"></a> +<a id="line-259" name="line-259"></a><span class="cm"> just remove the association to the older file object, it's obsolete</span> +<a id="line-260" name="line-260"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-261" name="line-261"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">f2</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-262" name="line-262"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">f2</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-263" name="line-263"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-264" name="line-264"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span><span class="w"></span> +<a id="line-265" name="line-265"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-266" name="line-266"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-267" name="line-267"></a> +<a id="line-268" name="line-268"></a><span class="w"> </span><span class="cm">/* too chatty */</span><span class="w"></span> +<a id="line-269" name="line-269"></a><span class="w"> </span><span class="cm">/* debug("adding %s <-> 0x%p", filename, file);*/</span><span class="w"></span> +<a id="line-270" name="line-270"></a><span class="w"> </span><span class="n">g_object_weak_ref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-271" name="line-271"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-272" name="line-272"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span><span class="w"></span> +<a id="line-273" name="line-273"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"changed"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-274" name="line-274"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-275" name="line-275"></a> +<a id="line-276" name="line-276"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-277" name="line-277"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-278" name="line-278"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-279" name="line-279"></a> +<a id="line-280" name="line-280"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">))</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-281" name="line-281"></a><span class="w"> </span><span class="n">caja_file_info_is_gone</span><span class="p">(</span><span class="n">file</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-282" name="line-282"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-283" name="line-283"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-284" name="line-284"></a> +<a id="line-285" name="line-285"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-286" name="line-286"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-287" name="line-287"></a> +<a id="line-288" name="line-288"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-289" name="line-289"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">provider</span><span class="p">;</span><span class="w"></span> +<a id="line-290" name="line-290"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GET_FILE_INFO</span><span class="p">;</span><span class="w"></span> +<a id="line-291" name="line-291"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_closure_ref</span><span class="p">(</span><span class="n">update_complete</span><span class="p">);</span><span class="w"></span> +<a id="line-292" name="line-292"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_ref</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-293" name="line-293"></a> +<a id="line-294" name="line-294"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">);</span><span class="w"></span> +<a id="line-295" name="line-295"></a> +<a id="line-296" name="line-296"></a><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">;</span><span class="w"></span> +<a id="line-297" name="line-297"></a> +<a id="line-298" name="line-298"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="w"></span> +<a id="line-299" name="line-299"></a><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="w"></span> +<a id="line-300" name="line-300"></a><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">CAJA_OPERATION_IN_PROGRESS</span><span class="p">;</span><span class="w"></span> +<a id="line-301" name="line-301"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-302" name="line-302"></a><span class="p">}</span><span class="w"></span> +<a id="line-303" name="line-303"></a> +<a id="line-304" name="line-304"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-305" name="line-305"></a><span class="nf">handle_shell_touch</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-306" name="line-306"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">path</span><span class="p">;</span><span class="w"></span> +<a id="line-307" name="line-307"></a> +<a id="line-308" name="line-308"></a><span class="w"> </span><span class="c1">// debug_enter();</span> +<a id="line-309" name="line-309"></a> +<a id="line-310" name="line-310"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-311" name="line-311"></a><span class="w"> </span><span class="n">path</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="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-312" name="line-312"></a><span class="hll"><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">;</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'file' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-313" name="line-313"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-314" name="line-314"></a> +<a id="line-315" name="line-315"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span><span class="w"></span> +<a id="line-316" name="line-316"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-317" name="line-317"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shell touch for %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-318" name="line-318"></a> +<a id="line-319" name="line-319"></a><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-320" name="line-320"></a> +<a id="line-321" name="line-321"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-322" name="line-322"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"gonna reset %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-323" name="line-323"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-324" name="line-324"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-325" name="line-325"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-326" name="line-326"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-327" name="line-327"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-328" name="line-328"></a> +<a id="line-329" name="line-329"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-330" name="line-330"></a><span class="p">}</span><span class="w"></span> +<a id="line-331" name="line-331"></a> +<a id="line-332" name="line-332"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-333" name="line-333"></a><span class="nf">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dficr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-334" name="line-334"></a> +<a id="line-335" name="line-335"></a><span class="w"> </span><span class="c1">//debug_enter();</span> +<a id="line-336" name="line-336"></a><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span><span class="w"></span> +<a id="line-337" name="line-337"></a> +<a id="line-338" name="line-338"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-339" name="line-339"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-340" name="line-340"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">isdir</span><span class="p">;</span><span class="w"></span> +<a id="line-341" name="line-341"></a> +<a id="line-342" name="line-342"></a><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">;</span><span class="w"></span> +<a id="line-343" name="line-343"></a> +<a id="line-344" name="line-344"></a><span class="w"> </span><span class="cm">/* if we have emblems just use them. */</span><span class="w"></span> +<a id="line-345" name="line-345"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-346" name="line-346"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">"emblems"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-347" name="line-347"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-348" name="line-348"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-349" name="line-349"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"></span> +<a id="line-350" name="line-350"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-351" name="line-351"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-352" name="line-352"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-353" name="line-353"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-354" name="line-354"></a><span class="w"> </span><span class="cm">/* if the file status command went okay */</span><span class="w"></span> +<a id="line-355" name="line-355"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-356" name="line-356"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"></span> +<a id="line-357" name="line-357"></a><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">"status"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-358" name="line-358"></a><span class="w"> </span><span class="p">((</span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">TRUE</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-359" name="line-359"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-360" name="line-360"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-361" name="line-361"></a> +<a id="line-362" name="line-362"></a><span class="w"> </span><span class="cm">/* set the tag emblem */</span><span class="w"></span> +<a id="line-363" name="line-363"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">isdir</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-364" name="line-364"></a><span class="w"> </span><span class="p">(</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">"tag"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-365" name="line-365"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-366" name="line-366"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"web"</span><span class="p">);</span><span class="w"></span> +<a id="line-367" name="line-367"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-368" name="line-368"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"shared"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-369" name="line-369"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"people"</span><span class="p">);</span><span class="w"></span> +<a id="line-370" name="line-370"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-371" name="line-371"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"photos"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-372" name="line-372"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"photos"</span><span class="p">);</span><span class="w"></span> +<a id="line-373" name="line-373"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-374" name="line-374"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"sandbox"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-375" name="line-375"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"star"</span><span class="p">);</span><span class="w"></span> +<a id="line-376" name="line-376"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-377" name="line-377"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-378" name="line-378"></a> +<a id="line-379" name="line-379"></a><span class="w"> </span><span class="cm">/* set the status emblem */</span><span class="w"></span> +<a id="line-380" name="line-380"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-381" name="line-381"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-382" name="line-382"></a> +<a id="line-383" name="line-383"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"up to date"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-384" name="line-384"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"></span> +<a id="line-385" name="line-385"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-386" name="line-386"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"syncing"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-387" name="line-387"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"></span> +<a id="line-388" name="line-388"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-389" name="line-389"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"unsyncable"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-390" name="line-390"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"></span> +<a id="line-391" name="line-391"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-392" name="line-392"></a> +<a id="line-393" name="line-393"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_code</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-394" name="line-394"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-395" name="line-395"></a><span class="cm"> debug("%s to %s", emblems[emblem_code-1],</span> +<a id="line-396" name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr->dfic->file),</span> +<a id="line-397" name="line-397"></a><span class="cm"> NULL, NULL));</span> +<a id="line-398" name="line-398"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-399" name="line-399"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">emblems</span><span class="p">[</span><span class="n">emblem_code</span><span class="mi">-1</span><span class="p">]);</span><span class="w"></span> +<a id="line-400" name="line-400"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-401" name="line-401"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-402" name="line-402"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-403" name="line-403"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-404" name="line-404"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-405" name="line-405"></a> +<a id="line-406" name="line-406"></a><span class="w"> </span><span class="cm">/* complete the info request */</span><span class="w"></span> +<a id="line-407" name="line-407"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-408" name="line-408"></a><span class="w"> </span><span class="n">caja_info_provider_update_complete_invoke</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">,</span><span class="w"></span> +<a id="line-409" name="line-409"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-410" name="line-410"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">,</span><span class="w"></span> +<a id="line-411" name="line-411"></a><span class="w"> </span><span class="n">result</span><span class="p">);</span><span class="w"></span> +<a id="line-412" name="line-412"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-413" name="line-413"></a> +<a id="line-414" name="line-414"></a><span class="w"> </span><span class="cm">/* destroy the objects we created */</span><span class="w"></span> +<a id="line-415" name="line-415"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-416" name="line-416"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">);</span><span class="w"></span> +<a id="line-417" name="line-417"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-418" name="line-418"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">);</span><span class="w"></span> +<a id="line-419" name="line-419"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-420" name="line-420"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">);</span><span class="w"></span> +<a id="line-421" name="line-421"></a> +<a id="line-422" name="line-422"></a><span class="w"> </span><span class="cm">/* unref the objects we didn't create */</span><span class="w"></span> +<a id="line-423" name="line-423"></a><span class="w"> </span><span class="n">g_closure_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">);</span><span class="w"></span> +<a id="line-424" name="line-424"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-425" name="line-425"></a> +<a id="line-426" name="line-426"></a><span class="w"> </span><span class="cm">/* now free the structs */</span><span class="w"></span> +<a id="line-427" name="line-427"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">);</span><span class="w"></span> +<a id="line-428" name="line-428"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="p">);</span><span class="w"></span> +<a id="line-429" name="line-429"></a> +<a id="line-430" name="line-430"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-431" name="line-431"></a><span class="p">}</span><span class="w"></span> +<a id="line-432" name="line-432"></a> +<a id="line-433" name="line-433"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-434" name="line-434"></a><span class="nf">caja_dropbox_cancel_update</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-435" name="line-435"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-436" name="line-436"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">handle</span><span class="p">;</span><span class="w"></span> +<a id="line-437" name="line-437"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-438" name="line-438"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-439" name="line-439"></a><span class="p">}</span><span class="w"></span> +<a id="line-440" name="line-440"></a> +<a id="line-441" name="line-441"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-442" name="line-442"></a><span class="nf">menu_item_cb</span><span class="p">(</span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">,</span><span class="w"></span> +<a id="line-443" name="line-443"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-444" name="line-444"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">verb</span><span class="p">;</span><span class="w"></span> +<a id="line-445" name="line-445"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">;</span><span class="w"></span> +<a id="line-446" name="line-446"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dcac</span><span class="p">;</span><span class="w"></span> +<a id="line-447" name="line-447"></a> +<a id="line-448" name="line-448"></a><span class="w"> </span><span class="n">dcac</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-449" name="line-449"></a> +<a id="line-450" name="line-450"></a><span class="w"> </span><span class="cm">/* maybe these would be better passed in a container</span> +<a id="line-451" name="line-451"></a><span class="cm"> struct used as the userdata pointer, oh well this</span> +<a id="line-452" name="line-452"></a><span class="cm"> is how dave camp does it */</span><span class="w"></span> +<a id="line-453" name="line-453"></a><span class="w"> </span><span class="n">files</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">);</span><span class="w"></span> +<a id="line-454" name="line-454"></a><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">);</span><span class="w"></span> +<a id="line-455" name="line-455"></a> +<a id="line-456" name="line-456"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span><span class="w"></span> +<a id="line-457" name="line-457"></a> +<a id="line-458" name="line-458"></a><span class="w"> </span><span class="cm">/* build the argument list */</span><span class="w"></span> +<a id="line-459" name="line-459"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-460" name="line-460"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-461" name="line-461"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-462" name="line-462"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span><span class="w"></span> +<a id="line-463" name="line-463"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-464" name="line-464"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span><span class="w"></span> +<a id="line-465" name="line-465"></a><span class="w"> </span><span class="n">guint</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-466" name="line-466"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">li</span><span class="p">;</span><span class="w"></span> +<a id="line-467" name="line-467"></a> +<a id="line-468" name="line-468"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-469" name="line-469"></a> +<a id="line-470" name="line-470"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-471" name="line-471"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">CAJA_FILE_INFO</span><span class="p">(</span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">));</span><span class="w"></span> +<a id="line-472" name="line-472"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-473" name="line-473"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-474" name="line-474"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">path</span><span class="p">)</span><span class="w"></span> +<a id="line-475" name="line-475"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"></span> +<a id="line-476" name="line-476"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">path</span><span class="p">;</span><span class="w"></span> +<a id="line-477" name="line-477"></a><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-478" name="line-478"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-479" name="line-479"></a> +<a id="line-480" name="line-480"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"></span> +<a id="line-481" name="line-481"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"></span> +<a id="line-482" name="line-482"></a><span class="w"> </span><span class="n">arglist</span><span class="p">);</span><span class="w"></span> +<a id="line-483" name="line-483"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-484" name="line-484"></a> +<a id="line-485" name="line-485"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-486" name="line-486"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span><span class="w"></span> +<a id="line-487" name="line-487"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w"></span> +<a id="line-488" name="line-488"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">);</span><span class="w"></span> +<a id="line-489" name="line-489"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-490" name="line-490"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"verb"</span><span class="p">),</span><span class="w"> </span><span class="n">arglist</span><span class="p">);</span><span class="w"></span> +<a id="line-491" name="line-491"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-492" name="line-492"></a> +<a id="line-493" name="line-493"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_action"</span><span class="p">);</span><span class="w"></span> +<a id="line-494" name="line-494"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-495" name="line-495"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-496" name="line-496"></a> +<a id="line-497" name="line-497"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dcac</span><span class="p">);</span><span class="w"></span> +<a id="line-498" name="line-498"></a><span class="p">}</span><span class="w"></span> +<a id="line-499" name="line-499"></a> +<a id="line-500" name="line-500"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="nf">from_hex</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-501" name="line-501"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">isdigit</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">ch</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'0'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">tolower</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'a'</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"></span> +<a id="line-502" name="line-502"></a><span class="p">}</span><span class="w"></span> +<a id="line-503" name="line-503"></a> +<a id="line-504" name="line-504"></a><span class="c1">// decode in --> out, but dont fill more than n chars into out</span> +<a id="line-505" name="line-505"></a><span class="c1">// returns len of out if thing went well, -1 if n wasn't big enough</span> +<a id="line-506" name="line-506"></a><span class="c1">// can be used in place (whoa!)</span> +<a id="line-507" name="line-507"></a><span class="kt">int</span><span class="w"> </span><span class="nf">GhettoURLDecode</span><span class="p">(</span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-508" name="line-508"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">out_initial</span><span class="p">;</span><span class="w"></span> +<a id="line-509" name="line-509"></a> +<a id="line-510" name="line-510"></a><span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="n">out_initial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">out</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-511" name="line-511"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'%'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-512" name="line-512"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-513" name="line-513"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span><span class="w"></span> +<a id="line-514" name="line-514"></a><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"></span> +<a id="line-515" name="line-515"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-516" name="line-516"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-517" name="line-517"></a><span class="w"> </span><span class="c1">// Input string isn't well-formed</span> +<a id="line-518" name="line-518"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span> +<a id="line-519" name="line-519"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-520" name="line-520"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-521" name="line-521"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-522" name="line-522"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="p">;</span><span class="w"></span> +<a id="line-523" name="line-523"></a><span class="w"> </span><span class="n">in</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-524" name="line-524"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-525" name="line-525"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-526" name="line-526"></a> +<a id="line-527" name="line-527"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-528" name="line-528"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"></span> +<a id="line-529" name="line-529"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="p">;</span><span class="w"></span> +<a id="line-530" name="line-530"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-531" name="line-531"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span> +<a id="line-532" name="line-532"></a><span class="p">}</span><span class="w"></span> +<a id="line-533" name="line-533"></a> +<a id="line-534" name="line-534"></a><span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"></span> +<a id="line-535" name="line-535"></a><span class="nf">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">,</span><span class="w"></span> +<a id="line-536" name="line-536"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">menu</span><span class="p">,</span><span class="w"></span> +<a id="line-537" name="line-537"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">old_action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-538" name="line-538"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="p">,</span><span class="w"></span> +<a id="line-539" name="line-539"></a><span class="w"> </span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-540" name="line-540"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span><span class="w"></span> +<a id="line-541" name="line-541"></a><span class="p">{</span><span class="w"></span> +<a id="line-542" name="line-542"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-543" name="line-543"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-544" name="line-544"></a> +<a id="line-545" name="line-545"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-546" name="line-546"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">option_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"~"</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span><span class="w"></span> +<a id="line-547" name="line-547"></a><span class="w"> </span><span class="cm">/* if this is a valid string */</span><span class="w"></span> +<a id="line-548" name="line-548"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-549" name="line-549"></a><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-550" name="line-550"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span><span class="w"></span> +<a id="line-551" name="line-551"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"></span> +<a id="line-552" name="line-552"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-553" name="line-553"></a> +<a id="line-554" name="line-554"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"></span> +<a id="line-555" name="line-555"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_inner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span><span class="w"></span> +<a id="line-556" name="line-556"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span><span class="w"></span> +<a id="line-557" name="line-557"></a> +<a id="line-558" name="line-558"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_name</span><span class="p">));</span><span class="w"></span> +<a id="line-559" name="line-559"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">verb</span><span class="p">));</span><span class="w"></span> +<a id="line-560" name="line-560"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_inner</span><span class="p">));</span><span class="w"></span> +<a id="line-561" name="line-561"></a> +<a id="line-562" name="line-562"></a><span class="w"> </span><span class="c1">// If the inner section has a menu in it then we create a submenu. The verb will be ignored.</span> +<a id="line-563" name="line-563"></a><span class="w"> </span><span class="c1">// Otherwise add the verb to our map and add the menu item to the list.</span> +<a id="line-564" name="line-564"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="sc">'~'</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-565" name="line-565"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span><span class="w"></span> +<a id="line-566" name="line-566"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">suboptions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="s">"|"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span><span class="w"></span> +<a id="line-567" name="line-567"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span><span class="w"></span> +<a id="line-568" name="line-568"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">submenu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span><span class="w"></span> +<a id="line-569" name="line-569"></a> +<a id="line-570" name="line-570"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">);</span><span class="w"></span> +<a id="line-571" name="line-571"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="s">"::"</span><span class="p">);</span><span class="w"></span> +<a id="line-572" name="line-572"></a> +<a id="line-573" name="line-573"></a><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">suboptions</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">,</span><span class="w"> </span><span class="n">new_action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-574" name="line-574"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">);</span><span class="w"></span> +<a id="line-575" name="line-575"></a> +<a id="line-576" name="line-576"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"></span> +<a id="line-577" name="line-577"></a><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="s">""</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-578" name="line-578"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">);</span><span class="w"></span> +<a id="line-579" name="line-579"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-580" name="line-580"></a> +<a id="line-581" name="line-581"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">suboptions</span><span class="p">);</span><span class="w"></span> +<a id="line-582" name="line-582"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-583" name="line-583"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">submenu</span><span class="p">);</span><span class="w"></span> +<a id="line-584" name="line-584"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-585" name="line-585"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-586" name="line-586"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span><span class="w"></span> +<a id="line-587" name="line-587"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span><span class="w"></span> +<a id="line-588" name="line-588"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-589" name="line-589"></a> +<a id="line-590" name="line-590"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">);</span><span class="w"></span> +<a id="line-591" name="line-591"></a> +<a id="line-592" name="line-592"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">item_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'!'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-593" name="line-593"></a><span class="w"> </span><span class="n">item_name</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-594" name="line-594"></a><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-595" name="line-595"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-596" name="line-596"></a> +<a id="line-597" name="line-597"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-598" name="line-598"></a> +<a id="line-599" name="line-599"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-600" name="line-600"></a><span class="w"> </span><span class="cm">/* add the file metadata to this item */</span><span class="w"></span> +<a id="line-601" name="line-601"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">,</span><span class="w"></span> +<a id="line-602" name="line-602"></a><span class="w"> </span><span class="n">caja_file_info_list_copy</span><span class="w"> </span><span class="p">(</span><span class="n">files</span><span class="p">),</span><span class="w"></span> +<a id="line-603" name="line-603"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">caja_file_info_list_free</span><span class="p">);</span><span class="w"></span> +<a id="line-604" name="line-604"></a><span class="w"> </span><span class="cm">/* add the verb metadata */</span><span class="w"></span> +<a id="line-605" name="line-605"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">,</span><span class="w"></span> +<a id="line-606" name="line-606"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">),</span><span class="w"></span> +<a id="line-607" name="line-607"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span><span class="w"></span> +<a id="line-608" name="line-608"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="w"> </span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="s">"activate"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="w"> </span><span class="p">(</span><span class="n">menu_item_cb</span><span class="p">),</span><span class="w"> </span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-609" name="line-609"></a> +<a id="line-610" name="line-610"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">grayed_out</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-611" name="line-611"></a><span class="w"> </span><span class="n">GValue</span><span class="w"> </span><span class="n">sensitive</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-612" name="line-612"></a><span class="w"> </span><span class="n">g_value_init</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">G_TYPE_BOOLEAN</span><span class="p">);</span><span class="w"></span> +<a id="line-613" name="line-613"></a><span class="w"> </span><span class="n">g_value_set_boolean</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span><span class="w"></span> +<a id="line-614" name="line-614"></a><span class="w"> </span><span class="n">g_object_set_property</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"sensitive"</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">sensitive</span><span class="p">);</span><span class="w"></span> +<a id="line-615" name="line-615"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-616" name="line-616"></a> +<a id="line-617" name="line-617"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-618" name="line-618"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-619" name="line-619"></a><span class="w"> </span><span class="n">ret</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-620" name="line-620"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-621" name="line-621"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span><span class="w"></span> +<a id="line-622" name="line-622"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-623" name="line-623"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span><span class="w"></span> +<a id="line-624" name="line-624"></a><span class="p">}</span><span class="w"></span> +<a id="line-625" name="line-625"></a> +<a id="line-626" name="line-626"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-627" name="line-627"></a><span class="nf">get_file_items_callback</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"></span> +<a id="line-628" name="line-628"></a><span class="p">{</span><span class="w"></span> +<a id="line-629" name="line-629"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span><span class="w"></span> +<a id="line-630" name="line-630"></a> +<a id="line-631" name="line-631"></a><span class="w"> </span><span class="cm">/* queue_push doesn't accept NULL as a value so we create an empty hash table</span> +<a id="line-632" name="line-632"></a><span class="cm"> * if we got no response. */</span><span class="w"></span> +<a id="line-633" name="line-633"></a><span class="w"> </span><span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">response</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"></span> +<a id="line-634" name="line-634"></a><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">));</span><span class="w"></span> +<a id="line-635" name="line-635"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-636" name="line-636"></a><span class="p">}</span><span class="w"></span> +<a id="line-637" name="line-637"></a> +<a id="line-638" name="line-638"></a> +<a id="line-639" name="line-639"></a><span class="k">static</span><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="w"></span> +<a id="line-640" name="line-640"></a><span class="nf">caja_dropbox_get_file_items</span><span class="p">(</span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-641" name="line-641"></a><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">window</span><span class="p">,</span><span class="w"></span> +<a id="line-642" name="line-642"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span><span class="w"></span> +<a id="line-643" name="line-643"></a><span class="p">{</span><span class="w"></span> +<a id="line-644" name="line-644"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-645" name="line-645"></a><span class="cm"> * 1. Convert files to filenames.</span> +<a id="line-646" name="line-646"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-647" name="line-647"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">);</span><span class="w"></span> +<a id="line-648" name="line-648"></a> +<a id="line-649" name="line-649"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file_count</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"></span> +<a id="line-650" name="line-650"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-651" name="line-651"></a> +<a id="line-652" name="line-652"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-653" name="line-653"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-654" name="line-654"></a><span class="w"> </span><span class="n">GList</span><span class="o">*</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"></span> +<a id="line-655" name="line-655"></a> +<a id="line-656" name="line-656"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elem</span><span class="o">-></span><span class="n">next</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-657" name="line-657"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">elem</span><span class="o">-></span><span class="n">data</span><span class="p">);</span><span class="w"></span> +<a id="line-658" name="line-658"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename_un</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-659" name="line-659"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename_un</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-660" name="line-660"></a> +<a id="line-661" name="line-661"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-662" name="line-662"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span><span class="w"></span> +<a id="line-663" name="line-663"></a> +<a id="line-664" name="line-664"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-665" name="line-665"></a><span class="w"> </span><span class="cm">/* oooh, filename wasn't correctly encoded, or isn't a local file. */</span><span class="w"></span> +<a id="line-666" name="line-666"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-667" name="line-667"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-668" name="line-668"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-669" name="line-669"></a> +<a id="line-670" name="line-670"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-671" name="line-671"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-672" name="line-672"></a> +<a id="line-673" name="line-673"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_new_full</span><span class="p">((</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="n">g_hash_table_unref</span><span class="p">);</span><span class="w"></span> +<a id="line-674" name="line-674"></a> +<a id="line-675" name="line-675"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-676" name="line-676"></a><span class="cm"> * 2. Create a DropboxGeneralCommand to call "icon_overlay_context_options"</span> +<a id="line-677" name="line-677"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-678" name="line-678"></a> +<a id="line-679" name="line-679"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-680" name="line-680"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span><span class="w"></span> +<a id="line-681" name="line-681"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_options"</span><span class="p">);</span><span class="w"></span> +<a id="line-682" name="line-682"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-683" name="line-683"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-684" name="line-684"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-685" name="line-685"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span><span class="w"></span> +<a id="line-686" name="line-686"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"> </span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-687" name="line-687"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">get_file_items_callback</span><span class="p">;</span><span class="w"></span> +<a id="line-688" name="line-688"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_ref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-689" name="line-689"></a> +<a id="line-690" name="line-690"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-691" name="line-691"></a><span class="cm"> * 3. Queue it up for the helper thread to run it.</span> +<a id="line-692" name="line-692"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-693" name="line-693"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-694" name="line-694"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dgc</span><span class="p">);</span><span class="w"></span> +<a id="line-695" name="line-695"></a> +<a id="line-696" name="line-696"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-697" name="line-697"></a><span class="cm"> * 4. We have to block until it's done because caja expects a reply. But we will</span> +<a id="line-698" name="line-698"></a><span class="cm"> * only block for 50 ms for a reply.</span> +<a id="line-699" name="line-699"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-700" name="line-700"></a> +<a id="line-701" name="line-701"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">context_options_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="mi">50000</span><span class="p">);</span><span class="w"></span> +<a id="line-702" name="line-702"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-703" name="line-703"></a> +<a id="line-704" name="line-704"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">context_options_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-705" name="line-705"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-706" name="line-706"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-707" name="line-707"></a> +<a id="line-708" name="line-708"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-709" name="line-709"></a><span class="cm"> * 5. Parse the reply.</span> +<a id="line-710" name="line-710"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-711" name="line-711"></a> +<a id="line-712" name="line-712"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">,</span><span class="w"> </span><span class="s">"options"</span><span class="p">);</span><span class="w"></span> +<a id="line-713" name="line-713"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-714" name="line-714"></a> +<a id="line-715" name="line-715"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-716" name="line-716"></a><span class="w"> </span><span class="cm">/* build the menu */</span><span class="w"></span> +<a id="line-717" name="line-717"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">root_item</span><span class="p">;</span><span class="w"></span> +<a id="line-718" name="line-718"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">root_menu</span><span class="p">;</span><span class="w"></span> +<a id="line-719" name="line-719"></a> +<a id="line-720" name="line-720"></a><span class="w"> </span><span class="n">root_menu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span><span class="w"></span> +<a id="line-721" name="line-721"></a><span class="w"> </span><span class="n">root_item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="s">"CajaDropbox::root_item"</span><span class="p">,</span><span class="w"></span> +<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">"Dropbox"</span><span class="p">,</span><span class="w"> </span><span class="s">"Dropbox Options"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox"</span><span class="p">);</span><span class="w"></span> +<a id="line-723" name="line-723"></a> +<a id="line-724" name="line-724"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_append</span><span class="p">(</span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">root_item</span><span class="p">);</span><span class="w"></span> +<a id="line-725" name="line-725"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="s">"CajaDropbox::"</span><span class="p">);</span><span class="w"></span> +<a id="line-726" name="line-726"></a> +<a id="line-727" name="line-727"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">options</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">,</span><span class="w"> </span><span class="n">action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-728" name="line-728"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-729" name="line-729"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">toret</span><span class="p">);</span><span class="w"></span> +<a id="line-730" name="line-730"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-731" name="line-731"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-732" name="line-732"></a> +<a id="line-733" name="line-733"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">root_item</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">);</span><span class="w"></span> +<a id="line-734" name="line-734"></a> +<a id="line-735" name="line-735"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-736" name="line-736"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">root_menu</span><span class="p">);</span><span class="w"></span> +<a id="line-737" name="line-737"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-738" name="line-738"></a> +<a id="line-739" name="line-739"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">);</span><span class="w"></span> +<a id="line-740" name="line-740"></a> +<a id="line-741" name="line-741"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span><span class="w"></span> +<a id="line-742" name="line-742"></a><span class="p">}</span><span class="w"></span> +<a id="line-743" name="line-743"></a> +<a id="line-744" name="line-744"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-745" name="line-745"></a><span class="nf">add_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-746" name="line-746"></a><span class="p">{</span><span class="w"></span> +<a id="line-747" name="line-747"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-748" name="line-748"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-749" name="line-749"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-750" name="line-750"></a> +<a id="line-751" name="line-751"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="p">;</span><span class="w"></span> +<a id="line-752" name="line-752"></a><span class="hll"><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-753" name="line-753"></a> +<a id="line-754" name="line-754"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="n">theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span><span class="w"></span> +<a id="line-755" name="line-755"></a> +<a id="line-756" name="line-756"></a><span class="hll"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">&&</span><span class="w"></span><span class="error2"><--- Condition 'emblem_paths_response' is always true</span> +</span><a id="line-757" name="line-757"></a><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-758" name="line-758"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-759" name="line-759"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"></span> +<a id="line-760" name="line-760"></a><span class="w"> </span><span class="n">gtk_icon_theme_append_search_path</span><span class="p">(</span><span class="n">theme</span><span class="p">,</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-761" name="line-761"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-762" name="line-762"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-763" name="line-763"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-764" name="line-764"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-765" name="line-765"></a><span class="p">}</span><span class="w"></span> +<a id="line-766" name="line-766"></a> +<a id="line-767" name="line-767"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-768" name="line-768"></a><span class="nf">remove_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-769" name="line-769"></a><span class="p">{</span><span class="w"></span> +<a id="line-770" name="line-770"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-771" name="line-771"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-772" name="line-772"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-773" name="line-773"></a> +<a id="line-774" name="line-774"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">);</span><span class="w"></span> +<a id="line-775" name="line-775"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_list</span><span class="p">)</span><span class="w"></span> +<a id="line-776" name="line-776"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span><span class="w"></span> +<a id="line-777" name="line-777"></a> +<a id="line-778" name="line-778"></a><span class="w"> </span><span class="c1">// We need to remove the old paths.</span> +<a id="line-779" name="line-779"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">icon_theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span><span class="w"></span> +<a id="line-780" name="line-780"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="w"> </span><span class="n">paths</span><span class="p">;</span><span class="w"></span> +<a id="line-781" name="line-781"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"></span> +<a id="line-782" name="line-782"></a> +<a id="line-783" name="line-783"></a><span class="w"> </span><span class="n">gtk_icon_theme_get_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">path_count</span><span class="p">);</span><span class="w"></span> +<a id="line-784" name="line-784"></a> +<a id="line-785" name="line-785"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-786" name="line-786"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-787" name="line-787"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-788" name="line-788"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-789" name="line-789"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-790" name="line-790"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-791" name="line-791"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">g_strcmp0</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-792" name="line-792"></a><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-793" name="line-793"></a><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-794" name="line-794"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-795" name="line-795"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span><span class="w"></span> +<a id="line-796" name="line-796"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-797" name="line-797"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-798" name="line-798"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-799" name="line-799"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keep</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-800" name="line-800"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">];</span><span class="w"></span> +<a id="line-801" name="line-801"></a><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-802" name="line-802"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-803" name="line-803"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-804" name="line-804"></a> +<a id="line-805" name="line-805"></a><span class="w"> </span><span class="cm">/* If we found one we need to reset the path to</span> +<a id="line-806" name="line-806"></a><span class="cm"> accomodate the changes */</span><span class="w"></span> +<a id="line-807" name="line-807"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">found</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-808" name="line-808"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Clear the last one */</span><span class="w"></span> +<a id="line-809" name="line-809"></a><span class="w"> </span><span class="n">gtk_icon_theme_set_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="p">)</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="p">);</span><span class="w"></span> +<a id="line-810" name="line-810"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-811" name="line-811"></a> +<a id="line-812" name="line-812"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-813" name="line-813"></a><span class="nl">exit</span><span class="p">:</span><span class="w"></span> +<a id="line-814" name="line-814"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-815" name="line-815"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-816" name="line-816"></a><span class="p">}</span><span class="w"></span> +<a id="line-817" name="line-817"></a> +<a id="line-818" name="line-818"></a><span class="kt">void</span><span class="w"> </span><span class="nf">get_emblem_paths_cb</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"></span> +<a id="line-819" name="line-819"></a><span class="p">{</span><span class="w"></span> +<a id="line-820" name="line-820"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-821" name="line-821"></a><span class="w"> </span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-822" name="line-822"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">);</span><span class="w"></span> +<a id="line-823" name="line-823"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">,</span><span class="w"> </span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">);</span><span class="w"></span> +<a id="line-824" name="line-824"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-825" name="line-825"></a><span class="w"> </span><span class="cm">/* Increase the ref so that finish_general_command doesn't delete it. */</span><span class="w"></span> +<a id="line-826" name="line-826"></a><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-827" name="line-827"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-828" name="line-828"></a> +<a id="line-829" name="line-829"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-830" name="line-830"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-831" name="line-831"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span><span class="w"></span> +<a id="line-832" name="line-832"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-833" name="line-833"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-834" name="line-834"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">;</span><span class="w"></span> +<a id="line-835" name="line-835"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-836" name="line-836"></a> +<a id="line-837" name="line-837"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">add_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">));</span><span class="w"></span> +<a id="line-838" name="line-838"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_all_files</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-839" name="line-839"></a><span class="p">}</span><span class="w"></span> +<a id="line-840" name="line-840"></a> +<a id="line-841" name="line-841"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-842" name="line-842"></a><span class="nf">on_connect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-843" name="line-843"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-844" name="line-844"></a> +<a id="line-845" name="line-845"></a><span class="w"> </span><span class="n">dropbox_command_client_send_command</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"></span> +<a id="line-846" name="line-846"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)</span><span class="w"> </span><span class="n">get_emblem_paths_cb</span><span class="p">,</span><span class="w"></span> +<a id="line-847" name="line-847"></a><span class="hll"><span class="w"> </span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="s">"get_emblem_paths"</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. <span class="marker">[+]</span></span><div class="content">Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. +The C99 standard, in section 7.15.1.1, states that if the type used by va_arg() is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined. +The value of the NULL macro is an implementation-defined null pointer constant (7.17), which can be any integer constant expression with the value 0, or such an expression casted to (void*) (6.3.2.3). This includes values like 0, 0L, or even 0LL. +In practice on common architectures, this will cause real crashes if sizeof(int) != sizeof(void*), and NULL is defined to 0 or any other null pointer constant that promotes to int. +To reproduce you might be able to use this little code example on 64bit platforms. If the output includes "ERROR", the sentinel had only 4 out of 8 bytes initialized to zero and was not detected as the final argument to stop argument processing via va_arg(). Changing the 0 to (void*)0 or 0L will make the "ERROR" output go away. +#include <stdarg.h> +#include <stdio.h> + +void f(char *s, ...) { + va_list ap; + va_start(ap,s); + for (;;) { + char *p = va_arg(ap,char*); + printf("%018p, %s\n", p, (long)p & 255 ? p : ""); + if(!p) break; + } + va_end(ap); +} + +void g() { + char *s2 = "x"; + char *s3 = "ERROR"; + + // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64 + f("first", s2, s2, s2, s2, s2, 0, s3, (char*)0); +} + +void h() { + int i; + volatile unsigned char a[1000]; + for (i = 0; i<sizeof(a); i++) + a[i] = -1; +} + +int main() { + h(); + g(); + return 0; +}</div></div> +</span><a id="line-848" name="line-848"></a><span class="p">}</span><span class="w"></span> +<a id="line-849" name="line-849"></a> +<a id="line-850" name="line-850"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-851" name="line-851"></a><span class="nf">on_disconnect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-852" name="line-852"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-853" name="line-853"></a> +<a id="line-854" name="line-854"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-855" name="line-855"></a><span class="w"> </span><span class="cm">/* This call will free the data too. */</span><span class="w"></span> +<a id="line-856" name="line-856"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span><span class="w"></span> +<a id="line-857" name="line-857"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-858" name="line-858"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-859" name="line-859"></a><span class="p">}</span><span class="w"></span> +<a id="line-860" name="line-860"></a> +<a id="line-861" name="line-861"></a> +<a id="line-862" name="line-862"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-863" name="line-863"></a><span class="nf">caja_dropbox_menu_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaMenuProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-864" name="line-864"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">get_file_items</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_get_file_items</span><span class="p">;</span><span class="w"></span> +<a id="line-865" name="line-865"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-866" name="line-866"></a><span class="p">}</span><span class="w"></span> +<a id="line-867" name="line-867"></a> +<a id="line-868" name="line-868"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-869" name="line-869"></a><span class="nf">caja_dropbox_info_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaInfoProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-870" name="line-870"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">update_file_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_update_file_info</span><span class="p">;</span><span class="w"></span> +<a id="line-871" name="line-871"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">cancel_update</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_cancel_update</span><span class="p">;</span><span class="w"></span> +<a id="line-872" name="line-872"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-873" name="line-873"></a><span class="p">}</span><span class="w"></span> +<a id="line-874" name="line-874"></a> +<a id="line-875" name="line-875"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-876" name="line-876"></a><span class="nf">caja_dropbox_instance_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-877" name="line-877"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-878" name="line-878"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-879" name="line-879"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-880" name="line-880"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-881" name="line-881"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-882" name="line-882"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-883" name="line-883"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-884" name="line-884"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span><span class="w"></span> +<a id="line-885" name="line-885"></a><span class="w"> </span><span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-886" name="line-886"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-887" name="line-887"></a> +<a id="line-888" name="line-888"></a><span class="w"> </span><span class="cm">/* setup the connection obj*/</span><span class="w"></span> +<a id="line-889" name="line-889"></a><span class="w"> </span><span class="n">dropbox_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span><span class="w"></span> +<a id="line-890" name="line-890"></a> +<a id="line-891" name="line-891"></a><span class="w"> </span><span class="cm">/* our hooks */</span><span class="w"></span> +<a id="line-892" name="line-892"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span><span class="w"> </span><span class="s">"shell_touch"</span><span class="p">,</span><span class="w"></span> +<a id="line-893" name="line-893"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxUpdateHook</span><span class="p">)</span><span class="w"> </span><span class="n">handle_shell_touch</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-894" name="line-894"></a> +<a id="line-895" name="line-895"></a><span class="w"> </span><span class="cm">/* add connection handlers */</span><span class="w"></span> +<a id="line-896" name="line-896"></a><span class="w"> </span><span class="n">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span><span class="w"></span> +<a id="line-897" name="line-897"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_connect</span><span class="p">,</span><span class="w"></span> +<a id="line-898" name="line-898"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-899" name="line-899"></a><span class="w"> </span><span class="n">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span><span class="w"></span> +<a id="line-900" name="line-900"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_disconnect</span><span class="p">,</span><span class="w"></span> +<a id="line-901" name="line-901"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-902" name="line-902"></a> +<a id="line-903" name="line-903"></a><span class="w"> </span><span class="cm">/* now start the connection */</span><span class="w"></span> +<a id="line-904" name="line-904"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"about to start client connection"</span><span class="p">);</span><span class="w"></span> +<a id="line-905" name="line-905"></a><span class="w"> </span><span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span><span class="w"></span> +<a id="line-906" name="line-906"></a> +<a id="line-907" name="line-907"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-908" name="line-908"></a><span class="p">}</span><span class="w"></span> +<a id="line-909" name="line-909"></a> +<a id="line-910" name="line-910"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-911" name="line-911"></a><span class="nf">caja_dropbox_class_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-912" name="line-912"></a><span class="p">}</span><span class="w"></span> +<a id="line-913" name="line-913"></a> +<a id="line-914" name="line-914"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-915" name="line-915"></a><span class="nf">caja_dropbox_class_finalize</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-916" name="line-916"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"just checking"</span><span class="p">);</span><span class="w"></span> +<a id="line-917" name="line-917"></a><span class="w"> </span><span class="cm">/* kill threads here? */</span><span class="w"></span> +<a id="line-918" name="line-918"></a><span class="p">}</span><span class="w"></span> +<a id="line-919" name="line-919"></a> +<a id="line-920" name="line-920"></a><span class="n">GType</span><span class="w"></span> +<a id="line-921" name="line-921"></a><span class="nf">caja_dropbox_get_type</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-922" name="line-922"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_type</span><span class="p">;</span><span class="w"></span> +<a id="line-923" name="line-923"></a><span class="p">}</span><span class="w"></span> +<a id="line-924" name="line-924"></a> +<a id="line-925" name="line-925"></a><span class="kt">void</span><span class="w"></span> +<a id="line-926" name="line-926"></a><span class="nf">caja_dropbox_register_type</span><span class="w"> </span><span class="p">(</span><span class="n">GTypeModule</span><span class="w"> </span><span class="o">*</span><span class="n">module</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-927" name="line-927"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GTypeInfo</span><span class="w"> </span><span class="n">info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-928" name="line-928"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="p">),</span><span class="w"></span> +<a id="line-929" name="line-929"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseInitFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-930" name="line-930"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-931" name="line-931"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_init</span><span class="p">,</span><span class="w"></span> +<a id="line-932" name="line-932"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_finalize</span><span class="p">,</span><span class="w"></span> +<a id="line-933" name="line-933"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-934" name="line-934"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="p">),</span><span class="w"></span> +<a id="line-935" name="line-935"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"></span> +<a id="line-936" name="line-936"></a><span class="w"> </span><span class="p">(</span><span class="n">GInstanceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_instance_init</span><span class="p">,</span><span class="w"></span> +<a id="line-937" name="line-937"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-938" name="line-938"></a> +<a id="line-939" name="line-939"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">menu_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-940" name="line-940"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_menu_provider_iface_init</span><span class="p">,</span><span class="w"></span> +<a id="line-941" name="line-941"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-942" name="line-942"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-943" name="line-943"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-944" name="line-944"></a> +<a id="line-945" name="line-945"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">info_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-946" name="line-946"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_info_provider_iface_init</span><span class="p">,</span><span class="w"></span> +<a id="line-947" name="line-947"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-948" name="line-948"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-949" name="line-949"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-950" name="line-950"></a> +<a id="line-951" name="line-951"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"></span> +<a id="line-952" name="line-952"></a><span class="w"> </span><span class="n">g_type_module_register_type</span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-953" name="line-953"></a><span class="w"> </span><span class="n">G_TYPE_OBJECT</span><span class="p">,</span><span class="w"></span> +<a id="line-954" name="line-954"></a><span class="w"> </span><span class="s">"CajaDropbox"</span><span class="p">,</span><span class="w"></span> +<a id="line-955" name="line-955"></a><span class="w"> </span><span class="o">&</span><span class="n">info</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span> +<a id="line-956" name="line-956"></a> +<a id="line-957" name="line-957"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-958" name="line-958"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span><span class="w"></span> +<a id="line-959" name="line-959"></a><span class="w"> </span><span class="n">CAJA_TYPE_MENU_PROVIDER</span><span class="p">,</span><span class="w"></span> +<a id="line-960" name="line-960"></a><span class="w"> </span><span class="o">&</span><span class="n">menu_provider_iface_info</span><span class="p">);</span><span class="w"></span> +<a id="line-961" name="line-961"></a> +<a id="line-962" name="line-962"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-963" name="line-963"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span><span class="w"></span> +<a id="line-964" name="line-964"></a><span class="w"> </span><span class="n">CAJA_TYPE_INFO_PROVIDER</span><span class="p">,</span><span class="w"></span> +<a id="line-965" name="line-965"></a><span class="w"> </span><span class="o">&</span><span class="n">info_provider_iface_info</span><span class="p">);</span><span class="w"></span> +<a id="line-966" name="line-966"></a><span class="p">}</span><span class="w"></span> +</pre></div> +</td></tr></table> + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/index.html b/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/index.html new file mode 100644 index 0000000..2c87aae --- /dev/null +++ b/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/index.html @@ -0,0 +1,202 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox</h1> + <div id="filters"> + + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="error"disabled/>error</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="warning"disabled/>warning</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="portability"checked/>portability</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="performance"disabled/>performance</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="style"checked/>style</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="information"checked/>information</label> + | + <label class="checkBtn"><input type="checkbox" onclick="toggleTool(this)" id="cppcheck"checked/>cppcheck</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleTool(this)" id="clang-tidy"disabled/>clang-tidy</label> + | + <label class="severityHeader">File: <input type="text" oninput="filterFile(this.value)"/></label> + <label class="severityHeader">Filter: <input type="text" oninput="filterText(this.value)"/></label> + </div> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Defect summary</a> </p> + + <label><input type="checkbox" class="idToggle" onclick="toggleAll()" checked> Toggle all</label> + <table> + <tr><th>Show</th><th>#</th><th>Defect ID</th></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="variableScope" name="variableScope" checked></td><td>2</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>1</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="missingIncludeSystem" name="missingIncludeSystem" checked></td><td>1</td><td>missingIncludeSystem</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="varFuncNullUB" name="varFuncNullUB" checked></td><td>1</td><td>varFuncNullUB</td></tr> + <tr><td></td><td>5</td><td>total</td></tr> + </table> + <p><a href="stats.html">Statistics</a></p> + </div> + <div id="content_index"> + + <table class="summaryTable"> + <tr><th>Line</th><th>Id</th><th>CWE</th><th>Severity</th><th>Message</th></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="1.html"></a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Cppcheck cannot find all the include files (use --check-config for details)</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="0.html">src/caja-dropbox.c</a></td></tr> + <tr class="variableScope sev_style issue"><td><a href="0.html#line-312">312</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 'file' can be reduced.</td></tr> + <tr class="variableScope sev_style issue"><td><a href="0.html#line-752">752</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 'i' can be reduced.</td></tr> + <tr class="knownConditionTrueFalse sev_style issue"><td><a href="0.html#line-756">756</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td>Condition 'emblem_paths_response' is always true</td></tr> + <tr class="varFuncNullUB sev_portability issue"><td><a href="0.html#line-847">847</a></td><td>varFuncNullUB</td><td><a href="https://cwe.mitre.org/data/definitions/475.html">475</a></td><td>portability</td><td>Passing NULL after the last typed argument to a variadic function leads to undefined behaviour.</td></tr> + </tbody> + </table> + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/stats.html b/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/stats.html new file mode 100644 index 0000000..6f8dab3 --- /dev/null +++ b/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/stats.html @@ -0,0 +1,170 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: Statistics</h1> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Back to summary</a> </p> + + </div> + <div id="content_index"> +<p><span class="statHeader">Top 10 files for portability severity, total findings: 1</span><br> +   1 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> +<p><span class="statHeader">Top 10 files for style severity, total findings: 3</span><br> +   3 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/style.css b/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/style.css new file mode 100644 index 0000000..3897bfa --- /dev/null +++ b/2022-11-11-213937-8071-cppcheck@21f8797d992b_master/style.css @@ -0,0 +1,177 @@ + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; + font-size: 13px; + line-height: 1.5; + height: 100%; + margin: 0; +} + +#wrapper { + position: fixed; + height: 100vh; + width: 100vw; + display: grid; + grid-template-rows: fit-content(8rem) auto fit-content(8rem); + grid-template-columns: fit-content(25%) 1fr; + grid-template-areas: + "header header" + "menu content" + "footer footer"; +} + +h1 { + margin: 0 0 8px -2px; + font-size: 175%; +} + +.header { + padding: 0 0 5px 15px; + grid-area: header; + border-bottom: thin solid #aaa; +} + +.footer { + grid-area: footer; + border-top: thin solid #aaa; + font-size: 85%; + +} + +.footer > p { + margin: 4px; +} + +#menu, +#menu_index { + grid-area: menu; + text-align: left; + overflow: auto; + padding: 0 23px 15px 15px; + border-right: thin solid #aaa; + min-width: 200px; +} + +#menu > a { + display: block; + margin-left: 10px; + font-size: 12px; +} + +#content, +#content_index { + grid-area: content; + padding: 0px 5px 15px 15px; + overflow: auto; +} + +label { + white-space: nowrap; +} + +label.checkBtn.disabled { + color: #606060; + background: #e0e0e0; + font-style: italic; +} + +label.checkBtn, input[type="text"] { + border: 1px solid grey; + border-radius: 4px; + box-shadow: 1px 1px inset; + padding: 1px 5px; +} + +label.checkBtn { + white-space: nowrap; + background: #ccddff; +} + +label.unchecked { + background: #eff8ff; + box-shadow: 1px 1px 1px; +} + +label.checkBtn:hover, label.unchecked:hover{ + box-shadow: 0 0 2px; +} + +label.disabled:hover { + box-shadow: 1px 1px inset; +} + +label.checkBtn > input { + display:none; +} + +.summaryTable { + width: 100%; +} + +table.summaryTable td { padding: 0 5px 0 5px; } + +.statHeader, .severityHeader { + font-weight: bold; +} + +.warning { + background-color: #ffffa7; +} + +.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; + position: relative; + margin: -10px; +} + +.linenos { + border-right: thin solid #aaa; + color: #d3d3d3; + padding-right: 6px; +} + +.id-filtered, .severity-filtered, .file-filtered, .tool-filtered, .text-filtered { + visibility: collapse; +} diff --git a/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/index.html b/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/index.html new file mode 100644 index 0000000..52f6867 --- /dev/null +++ b/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/index.html @@ -0,0 +1,94 @@ +<html> +<head> +<title>rootdir - scan-build results</title> +<link type="text/css" rel="stylesheet" href="scanview.css"/> +<script src="sorttable.js"></script> +<script language='javascript' type="text/javascript"> +function SetDisplay(RowClass, DisplayVal) +{ + var Rows = document.getElementsByTagName("tr"); + for ( var i = 0 ; i < Rows.length; ++i ) { + if (Rows[i].className == RowClass) { + Rows[i].style.display = DisplayVal; + } + } +} + +function CopyCheckedStateToCheckButtons(SummaryCheckButton) { + var Inputs = document.getElementsByTagName("input"); + for ( var i = 0 ; i < Inputs.length; ++i ) { + if (Inputs[i].type == "checkbox") { + if(Inputs[i] != SummaryCheckButton) { + Inputs[i].checked = SummaryCheckButton.checked; + Inputs[i].onclick(); + } + } + } +} + +function returnObjById( id ) { + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +var NumUnchecked = 0; + +function ToggleDisplay(CheckButton, ClassName) { + if (CheckButton.checked) { + SetDisplay(ClassName, ""); + if (--NumUnchecked == 0) { + returnObjById("AllBugsCheck").checked = true; + } + } + else { + SetDisplay(ClassName, "none"); + NumUnchecked++; + returnObjById("AllBugsCheck").checked = false; + } +} +</script> +<!-- SUMMARYENDHEAD --> +</head> +<body> +<h1>rootdir - scan-build results</h1> + +<table> +<tr><th>User:</th><td>root@6c22e919ed41</td></tr> +<tr><th>Working Directory:</th><td>/rootdir</td></tr> +<tr><th>Command Line:</th><td>make -j 2</td></tr> +<tr><th>Clang Version:</th><td>clang version 14.0.5 (Fedora 14.0.5-1.fc36) +</td></tr> +<tr><th>Date:</th><td>Fri Nov 11 21:39:51 2022</td></tr> +</table> +<h2>Bug Summary</h2><table> +<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead> +<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">1</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr> +<tr><th>Logic error</th><th colspan=2></th></tr> +<tr><td class="SUMM_DESC">Cast from non-struct type to struct type</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_cast_from_non-struct_type_to_struct_type');" checked/></center></td></tr> +</table> +<h2>Reports</h2> + +<table class="sortable" style="table-layout:automatic"> +<thead><tr> + <td>Bug Group</td> + <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind"> ▾</span></td> + <td>File</td> + <td>Function/Method</td> + <td class="Q">Line</td> + <td class="Q">Path Length</td> + <td class="sorttable_nosort"></td> + <!-- REPORTBUGCOL --> +</tr></thead> +<tbody> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-1b9128.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-1b9128.html" --> +</tr> +</tbody> +</table> + +</body></html> diff --git a/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/report-1b9128.html b/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/report-1b9128.html new file mode 100644 index 0000000..51b8943 --- /dev/null +++ b/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/report-1b9128.html @@ -0,0 +1,1553 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { position:relative } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.msg.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/14.0.5 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -D PIC -internal-isystem /usr/lib64/clang/14.0.5/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2022-11-11-213951-5768-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // SHIFT + S + if (event.shiftKey && event.keyCode == 83) { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].click(); + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> + <input type="checkbox" name="showArrows" + id="showArrows" style="margin-left: 10px" /> + <label for="showArrows"> + Show control flow arrows + </label> +</form> + +<script type='text/javascript'> +// Return range of numbers from a range [lower, upper). +function range(lower, upper) { + var array = []; + for (var i = lower; i <= upper; ++i) { + array.push(i); + } + return array; +} + +var getRelatedArrowIndices = function(pathId) { + // HTML numeration of events is a bit different than it is in the path. + // Everything is rotated one step to the right, so the last element + // (error diagnostic) has index 0. + if (pathId == 0) { + // arrowIndices has at least 2 elements + pathId = arrowIndices.length - 1; + } + + return range(arrowIndices[pathId], arrowIndices[pathId - 1]); +} + +var highlightArrowsForSelectedEvent = function() { + const selectedNum = findNum(); + const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum); + arrowIndicesToHighlight.forEach((index) => { + var arrow = document.querySelector("#arrow" + index); + if(arrow) { + classListAdd(arrow, "selected") + } + }); +} + +var getAbsoluteBoundingRect = function(element) { + const relative = element.getBoundingClientRect(); + return { + left: relative.left + window.pageXOffset, + right: relative.right + window.pageXOffset, + top: relative.top + window.pageYOffset, + bottom: relative.bottom + window.pageYOffset, + height: relative.height, + width: relative.width + }; +} + +var drawArrow = function(index) { + // This function is based on the great answer from SO: + // https://stackoverflow.com/a/39575674/11582326 + var start = document.querySelector("#start" + index); + var end = document.querySelector("#end" + index); + var arrow = document.querySelector("#arrow" + index); + + var startRect = getAbsoluteBoundingRect(start); + var endRect = getAbsoluteBoundingRect(end); + + // It is an arrow from a token to itself, no need to visualize it. + if (startRect.top == endRect.top && + startRect.left == endRect.left) + return; + + // Each arrow is a very simple Bézier curve, with two nodes and + // two handles. So, we need to calculate four points in the window: + // * start node + var posStart = { x: 0, y: 0 }; + // * end node + var posEnd = { x: 0, y: 0 }; + // * handle for the start node + var startHandle = { x: 0, y: 0 }; + // * handle for the end node + var endHandle = { x: 0, y: 0 }; + // One can visualize it as follows: + // + // start handle + // / + // X"""_.-""""X + // .' \ + // / start node + // | + // | + // | end node + // \ / + // `->X + // X-' + // \ + // end handle + // + // NOTE: (0, 0) is the top left corner of the window. + + // We have 3 similar, but still different scenarios to cover: + // + // 1. Two tokens on different lines. + // -xxx + // / + // \ + // -> xxx + // In this situation, we draw arrow on the left curving to the left. + // 2. Two tokens on the same line, and the destination is on the right. + // ____ + // / \ + // / V + // xxx xxx + // In this situation, we draw arrow above curving upwards. + // 3. Two tokens on the same line, and the destination is on the left. + // xxx xxx + // ^ / + // \____/ + // In this situation, we draw arrow below curving downwards. + const onDifferentLines = startRect.top <= endRect.top - 5 || + startRect.top >= endRect.top + 5; + const leftToRight = startRect.left < endRect.left; + + // NOTE: various magic constants are chosen empirically for + // better positioning and look + if (onDifferentLines) { + // Case #1 + const topToBottom = startRect.top < endRect.top; + posStart.x = startRect.left - 1; + // We don't want to start it at the top left corner of the token, + // it doesn't feel like this is where the arrow comes from. + // For this reason, we start it in the middle of the left side + // of the token. + posStart.y = startRect.top + startRect.height / 2; + + // End node has arrow head and we give it a bit more space. + posEnd.x = endRect.left - 4; + posEnd.y = endRect.top; + + // Utility object with x and y offsets for handles. + var curvature = { + // We want bottom-to-top arrow to curve a bit more, so it doesn't + // overlap much with top-to-bottom curves (much more frequent). + x: topToBottom ? 15 : 25, + y: Math.min((posEnd.y - posStart.y) / 3, 10) + } + + // When destination is on the different line, we can make a + // curvier arrow because we have space for it. + // So, instead of using + // + // startHandle.x = posStart.x - curvature.x + // endHandle.x = posEnd.x - curvature.x + // + // We use the leftmost of these two values for both handles. + startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x; + endHandle.x = startHandle.x; + + // Curving downwards from the start node... + startHandle.y = posStart.y + curvature.y; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else if (leftToRight) { + // Case #2 + // Starting from the top right corner... + posStart.x = startRect.right - 1; + posStart.y = startRect.top; + + // ...and ending at the top left corner of the end token. + posEnd.x = endRect.left + 1; + posEnd.y = endRect.top - 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posEnd.x - posStart.x) / 3, 15), + y: 5 + } + + // Curving to the right... + startHandle.x = posStart.x + curvature.x; + // ... and upwards from the start node. + startHandle.y = posStart.y - curvature.y; + + // And to the left... + endHandle.x = posEnd.x - curvature.x; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else { + // Case #3 + // Starting from the bottom right corner... + posStart.x = startRect.right; + posStart.y = startRect.bottom; + + // ...and ending also at the bottom right corner, but of the end token. + posEnd.x = endRect.right - 1; + posEnd.y = endRect.bottom + 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posStart.x - posEnd.x) / 3, 15), + y: 5 + } + + // Curving to the left... + startHandle.x = posStart.x - curvature.x; + // ... and downwards from the start node. + startHandle.y = posStart.y + curvature.y; + + // And to the right... + endHandle.x = posEnd.x + curvature.x; + // ... and downwards from the end node. + endHandle.y = posEnd.y + curvature.y; + } + + // Put it all together into a path. + // More information on the format: + // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths + var pathStr = "M" + posStart.x + "," + posStart.y + " " + + "C" + startHandle.x + "," + startHandle.y + " " + + endHandle.x + "," + endHandle.y + " " + + posEnd.x + "," + posEnd.y; + + arrow.setAttribute("d", pathStr); +}; + +var drawArrows = function() { + const numOfArrows = document.querySelectorAll("path[id^=arrow]").length; + for (var i = 0; i < numOfArrows; ++i) { + drawArrow(i); + } +} + +var toggleArrows = function(event) { + const arrows = document.querySelector("#arrows"); + if (event.target.checked) { + arrows.setAttribute("visibility", "visible"); + } else { + arrows.setAttribute("visibility", "hidden"); + } +} + +window.addEventListener("resize", drawArrows); +document.addEventListener("DOMContentLoaded", function() { + // Whenever we show invocation, locations change, i.e. we + // need to redraw arrows. + document + .querySelector('input[id="showinvocation"]') + .addEventListener("click", drawArrows); + // Hiding irrelevant lines also should cause arrow rerender. + document + .querySelector('input[name="showCounterexample"]') + .addEventListener("change", drawArrows); + document + .querySelector('input[name="showArrows"]') + .addEventListener("change", toggleArrows); + drawArrows(); + // Default highlighting for the last event. + highlightArrowsForSelectedEvent(); +}); +</script> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".msg.selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var classListAdd = function(el, theClass) { + if(!el.className.baseVal) + el.className += " " + theClass; + else + el.className.baseVal += " " + theClass; +}; + +var classListRemove = function(el, theClass) { + var className = (!el.className.baseVal) ? + el.className : el.className.baseVal; + className = className.replace(" " + theClass, ""); + if(!el.className.baseVal) + el.className = className; + else + el.className.baseVal = className; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + classListRemove(s, "selected"); + }); + classListAdd(el, "selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); + highlightArrowsForSelectedEvent(); +}; + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // key 'j' + if (event.keyCode == 74) { + navigateTo(/*up=*/false); + // key 'k' + } else if (event.keyCode == 75) { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> + +<style type="text/css"> + svg { + position:absolute; + top:0; + left:0; + height:100%; + width:100%; + pointer-events: none; + overflow: visible + } + .arrow { + stroke-opacity: 0.2; + stroke-width: 1; + marker-end: url(#arrowhead); + } + + .arrow.selected { + stroke-opacity: 0.6; + stroke-width: 2; + marker-end: url(#arrowheadSelected); + } + + .arrowhead { + orient: auto; + stroke: none; + opacity: 0.6; + fill: blue; + } +</style> +<svg xmlns="http://www.w3.org/2000/svg"> + <defs> + <marker id="arrowheadSelected" class="arrowhead" opacity="0.6" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + <marker id="arrowhead" class="arrowhead" opacity="0.2" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + </defs> + <g id="arrows" fill="none" stroke="blue" visibility="hidden"> + + </g> +</svg> +<script type='text/javascript'> +const arrowIndices = [ 0,0 ] +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/scanview.css b/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/scanview.css new file mode 100644 index 0000000..cf8a5a6 --- /dev/null +++ b/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/scanview.css @@ -0,0 +1,62 @@ +body { color:#000000; background-color:#ffffff } +body { font-family: Helvetica, sans-serif; font-size:9pt } +h1 { font-size: 14pt; } +h2 { font-size: 12pt; } +table { font-size:9pt } +table { border-spacing: 0px; border: 1px solid black } +th, table thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + font-weight: bold; font-family: Verdana; + white-space:nowrap; +} +.W { font-size:0px } +th, td { padding:5px; padding-left:8px; text-align:left } +td.SUMM_DESC { padding-left:12px } +td.DESC { white-space:pre } +td.Q { text-align:right } +td { text-align:left } +tbody.scrollContent { overflow:auto } + +table.form_group { + background-color: #ccc; + border: 1px solid #333; + padding: 2px; +} + +table.form_inner_group { + background-color: #ccc; + border: 1px solid #333; + padding: 0px; +} + +table.form { + background-color: #999; + border: 1px solid #333; + padding: 2px; +} + +td.form_label { + text-align: right; + vertical-align: top; +} +/* For one line entires */ +td.form_clabel { + text-align: right; + vertical-align: center; +} +td.form_value { + text-align: left; + vertical-align: top; +} +td.form_submit { + text-align: right; + vertical-align: top; +} + +h1.SubmitFail { + color: #f00; +} +h1.SubmitOk { +} diff --git a/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/sorttable.js b/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/sorttable.js new file mode 100644 index 0000000..32faa07 --- /dev/null +++ b/2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/sorttable.js @@ -0,0 +1,492 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backward compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + //row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[�$�]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; diff --git a/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/0.html b/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/0.html new file mode 100644 index 0000000..10d21ac --- /dev/null +++ b/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/0.html @@ -0,0 +1,2231 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/caja-dropbox.c</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> caja-dropbox.c</p> +<a href="0.html#line-312"> variableScope 312</a><a href="0.html#line-752"> variableScope 752</a><a href="0.html#line-756"> knownConditionTrueFalse 756</a><a href="0.html#line-847"> varFuncNullUB 847</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span> +<span class="normal">114</span> +<span class="normal">115</span> +<span class="normal">116</span> +<span class="normal">117</span> +<span class="normal">118</span> +<span class="normal">119</span> +<span class="normal">120</span> +<span class="normal">121</span> +<span class="normal">122</span> +<span class="normal">123</span> +<span class="normal">124</span> +<span class="normal">125</span> +<span class="normal">126</span> +<span class="normal">127</span> +<span class="normal">128</span> +<span class="normal">129</span> +<span class="normal">130</span> +<span class="normal">131</span> +<span class="normal">132</span> +<span class="normal">133</span> +<span class="normal">134</span> +<span class="normal">135</span> +<span class="normal">136</span> +<span class="normal">137</span> +<span class="normal">138</span> +<span class="normal">139</span> +<span class="normal">140</span> +<span class="normal">141</span> +<span class="normal">142</span> +<span class="normal">143</span> +<span class="normal">144</span> +<span class="normal">145</span> +<span class="normal">146</span> +<span class="normal">147</span> +<span class="normal">148</span> +<span class="normal">149</span> +<span class="normal">150</span> +<span class="normal">151</span> +<span class="normal">152</span> +<span class="normal">153</span> +<span class="normal">154</span> +<span class="normal">155</span> +<span class="normal">156</span> +<span class="normal">157</span> +<span class="normal">158</span> +<span class="normal">159</span> +<span class="normal">160</span> +<span class="normal">161</span> +<span class="normal">162</span> +<span class="normal">163</span> +<span class="normal">164</span> +<span class="normal">165</span> +<span class="normal">166</span> +<span class="normal">167</span> +<span class="normal">168</span> +<span class="normal">169</span> +<span class="normal">170</span> +<span class="normal">171</span> +<span class="normal">172</span> +<span class="normal">173</span> +<span class="normal">174</span> +<span class="normal">175</span> +<span class="normal">176</span> +<span class="normal">177</span> +<span class="normal">178</span> +<span class="normal">179</span> +<span class="normal">180</span> +<span class="normal">181</span> +<span class="normal">182</span> +<span class="normal">183</span> +<span class="normal">184</span> +<span class="normal">185</span> +<span class="normal">186</span> +<span class="normal">187</span> +<span class="normal">188</span> +<span class="normal">189</span> +<span class="normal">190</span> +<span class="normal">191</span> +<span class="normal">192</span> +<span class="normal">193</span> +<span class="normal">194</span> +<span class="normal">195</span> +<span class="normal">196</span> +<span class="normal">197</span> +<span class="normal">198</span> +<span class="normal">199</span> +<span class="normal">200</span> +<span class="normal">201</span> +<span class="normal">202</span> +<span class="normal">203</span> +<span class="normal">204</span> +<span class="normal">205</span> +<span class="normal">206</span> +<span class="normal">207</span> +<span class="normal">208</span> +<span class="normal">209</span> +<span class="normal">210</span> +<span class="normal">211</span> +<span class="normal">212</span> +<span class="normal">213</span> +<span class="normal">214</span> +<span class="normal">215</span> +<span class="normal">216</span> +<span class="normal">217</span> +<span class="normal">218</span> +<span class="normal">219</span> +<span class="normal">220</span> +<span class="normal">221</span> +<span class="normal">222</span> +<span class="normal">223</span> +<span class="normal">224</span> +<span class="normal">225</span> +<span class="normal">226</span> +<span class="normal">227</span> +<span class="normal">228</span> +<span class="normal">229</span> +<span class="normal">230</span> +<span class="normal">231</span> +<span class="normal">232</span> +<span class="normal">233</span> +<span class="normal">234</span> +<span class="normal">235</span> +<span class="normal">236</span> +<span class="normal">237</span> +<span class="normal">238</span> +<span class="normal">239</span> +<span class="normal">240</span> +<span class="normal">241</span> +<span class="normal">242</span> +<span class="normal">243</span> +<span class="normal">244</span> +<span class="normal">245</span> +<span class="normal">246</span> +<span class="normal">247</span> +<span class="normal">248</span> +<span class="normal">249</span> +<span class="normal">250</span> +<span class="normal">251</span> +<span class="normal">252</span> +<span class="normal">253</span> +<span class="normal">254</span> +<span class="normal">255</span> +<span class="normal">256</span> +<span class="normal">257</span> +<span class="normal">258</span> +<span class="normal">259</span> +<span class="normal">260</span> +<span class="normal">261</span> +<span class="normal">262</span> +<span class="normal">263</span> +<span class="normal">264</span> +<span class="normal">265</span> +<span class="normal">266</span> +<span class="normal">267</span> +<span class="normal">268</span> +<span class="normal">269</span> +<span class="normal">270</span> +<span class="normal">271</span> +<span class="normal">272</span> +<span class="normal">273</span> +<span class="normal">274</span> +<span class="normal">275</span> +<span class="normal">276</span> +<span class="normal">277</span> +<span class="normal">278</span> +<span class="normal">279</span> +<span class="normal">280</span> +<span class="normal">281</span> +<span class="normal">282</span> +<span class="normal">283</span> +<span class="normal">284</span> +<span class="normal">285</span> +<span class="normal">286</span> +<span class="normal">287</span> +<span class="normal">288</span> +<span class="normal">289</span> +<span class="normal">290</span> +<span class="normal">291</span> +<span class="normal">292</span> +<span class="normal">293</span> +<span class="normal">294</span> +<span class="normal">295</span> +<span class="normal">296</span> +<span class="normal">297</span> +<span class="normal">298</span> +<span class="normal">299</span> +<span class="normal">300</span> +<span class="normal">301</span> +<span class="normal">302</span> +<span class="normal">303</span> +<span class="normal">304</span> +<span class="normal">305</span> +<span class="normal">306</span> +<span class="normal">307</span> +<span class="normal">308</span> +<span class="normal">309</span> +<span class="normal">310</span> +<span class="normal">311</span> +<span class="normal">312</span> +<span class="normal">313</span> +<span class="normal">314</span> +<span class="normal">315</span> +<span class="normal">316</span> +<span class="normal">317</span> +<span class="normal">318</span> +<span class="normal">319</span> +<span class="normal">320</span> +<span class="normal">321</span> +<span class="normal">322</span> +<span class="normal">323</span> +<span class="normal">324</span> +<span class="normal">325</span> +<span class="normal">326</span> +<span class="normal">327</span> +<span class="normal">328</span> +<span class="normal">329</span> +<span class="normal">330</span> +<span class="normal">331</span> +<span class="normal">332</span> +<span class="normal">333</span> +<span class="normal">334</span> +<span class="normal">335</span> +<span class="normal">336</span> +<span class="normal">337</span> +<span class="normal">338</span> +<span class="normal">339</span> +<span class="normal">340</span> +<span class="normal">341</span> +<span class="normal">342</span> +<span class="normal">343</span> +<span class="normal">344</span> +<span class="normal">345</span> +<span class="normal">346</span> +<span class="normal">347</span> +<span class="normal">348</span> +<span class="normal">349</span> +<span class="normal">350</span> +<span class="normal">351</span> +<span class="normal">352</span> +<span class="normal">353</span> +<span class="normal">354</span> +<span class="normal">355</span> +<span class="normal">356</span> +<span class="normal">357</span> +<span class="normal">358</span> +<span class="normal">359</span> +<span class="normal">360</span> +<span class="normal">361</span> +<span class="normal">362</span> +<span class="normal">363</span> +<span class="normal">364</span> +<span class="normal">365</span> +<span class="normal">366</span> +<span class="normal">367</span> +<span class="normal">368</span> +<span class="normal">369</span> +<span class="normal">370</span> +<span class="normal">371</span> +<span class="normal">372</span> +<span class="normal">373</span> +<span class="normal">374</span> +<span class="normal">375</span> +<span class="normal">376</span> +<span class="normal">377</span> +<span class="normal">378</span> +<span class="normal">379</span> +<span class="normal">380</span> +<span class="normal">381</span> +<span class="normal">382</span> +<span class="normal">383</span> +<span class="normal">384</span> +<span class="normal">385</span> +<span class="normal">386</span> +<span class="normal">387</span> +<span class="normal">388</span> +<span class="normal">389</span> +<span class="normal">390</span> +<span class="normal">391</span> +<span class="normal">392</span> +<span class="normal">393</span> +<span class="normal">394</span> +<span class="normal">395</span> +<span class="normal">396</span> +<span class="normal">397</span> +<span class="normal">398</span> +<span class="normal">399</span> +<span class="normal">400</span> +<span class="normal">401</span> +<span class="normal">402</span> +<span class="normal">403</span> +<span class="normal">404</span> +<span class="normal">405</span> +<span class="normal">406</span> +<span class="normal">407</span> +<span class="normal">408</span> +<span class="normal">409</span> +<span class="normal">410</span> +<span class="normal">411</span> +<span class="normal">412</span> +<span class="normal">413</span> +<span class="normal">414</span> +<span class="normal">415</span> +<span class="normal">416</span> +<span class="normal">417</span> +<span class="normal">418</span> +<span class="normal">419</span> +<span class="normal">420</span> +<span class="normal">421</span> +<span class="normal">422</span> +<span class="normal">423</span> +<span class="normal">424</span> +<span class="normal">425</span> +<span class="normal">426</span> +<span class="normal">427</span> +<span class="normal">428</span> +<span class="normal">429</span> +<span class="normal">430</span> +<span class="normal">431</span> +<span class="normal">432</span> +<span class="normal">433</span> +<span class="normal">434</span> +<span class="normal">435</span> +<span class="normal">436</span> +<span class="normal">437</span> +<span class="normal">438</span> +<span class="normal">439</span> +<span class="normal">440</span> +<span class="normal">441</span> +<span class="normal">442</span> +<span class="normal">443</span> +<span class="normal">444</span> +<span class="normal">445</span> +<span class="normal">446</span> +<span class="normal">447</span> +<span class="normal">448</span> +<span class="normal">449</span> +<span class="normal">450</span> +<span class="normal">451</span> +<span class="normal">452</span> +<span class="normal">453</span> +<span class="normal">454</span> +<span class="normal">455</span> +<span class="normal">456</span> +<span class="normal">457</span> +<span class="normal">458</span> +<span class="normal">459</span> +<span class="normal">460</span> +<span class="normal">461</span> +<span class="normal">462</span> +<span class="normal">463</span> +<span class="normal">464</span> +<span class="normal">465</span> +<span class="normal">466</span> +<span class="normal">467</span> +<span class="normal">468</span> +<span class="normal">469</span> +<span class="normal">470</span> +<span class="normal">471</span> +<span class="normal">472</span> +<span class="normal">473</span> +<span class="normal">474</span> +<span class="normal">475</span> +<span class="normal">476</span> +<span class="normal">477</span> +<span class="normal">478</span> +<span class="normal">479</span> +<span class="normal">480</span> +<span class="normal">481</span> +<span class="normal">482</span> +<span class="normal">483</span> +<span class="normal">484</span> +<span class="normal">485</span> +<span class="normal">486</span> +<span class="normal">487</span> +<span class="normal">488</span> +<span class="normal">489</span> +<span class="normal">490</span> +<span class="normal">491</span> +<span class="normal">492</span> +<span class="normal">493</span> +<span class="normal">494</span> +<span class="normal">495</span> +<span class="normal">496</span> +<span class="normal">497</span> +<span class="normal">498</span> +<span class="normal">499</span> +<span class="normal">500</span> +<span class="normal">501</span> +<span class="normal">502</span> +<span class="normal">503</span> +<span class="normal">504</span> +<span class="normal">505</span> +<span class="normal">506</span> +<span class="normal">507</span> +<span class="normal">508</span> +<span class="normal">509</span> +<span class="normal">510</span> +<span class="normal">511</span> +<span class="normal">512</span> +<span class="normal">513</span> +<span class="normal">514</span> +<span class="normal">515</span> +<span class="normal">516</span> +<span class="normal">517</span> +<span class="normal">518</span> +<span class="normal">519</span> +<span class="normal">520</span> +<span class="normal">521</span> +<span class="normal">522</span> +<span class="normal">523</span> +<span class="normal">524</span> +<span class="normal">525</span> +<span class="normal">526</span> +<span class="normal">527</span> +<span class="normal">528</span> +<span class="normal">529</span> +<span class="normal">530</span> +<span class="normal">531</span> +<span class="normal">532</span> +<span class="normal">533</span> +<span class="normal">534</span> +<span class="normal">535</span> +<span class="normal">536</span> +<span class="normal">537</span> +<span class="normal">538</span> +<span class="normal">539</span> +<span class="normal">540</span> +<span class="normal">541</span> +<span class="normal">542</span> +<span class="normal">543</span> +<span class="normal">544</span> +<span class="normal">545</span> +<span class="normal">546</span> +<span class="normal">547</span> +<span class="normal">548</span> +<span class="normal">549</span> +<span class="normal">550</span> +<span class="normal">551</span> +<span class="normal">552</span> +<span class="normal">553</span> +<span class="normal">554</span> +<span class="normal">555</span> +<span class="normal">556</span> +<span class="normal">557</span> +<span class="normal">558</span> +<span class="normal">559</span> +<span class="normal">560</span> +<span class="normal">561</span> +<span class="normal">562</span> +<span class="normal">563</span> +<span class="normal">564</span> +<span class="normal">565</span> +<span class="normal">566</span> +<span class="normal">567</span> +<span class="normal">568</span> +<span class="normal">569</span> +<span class="normal">570</span> +<span class="normal">571</span> +<span class="normal">572</span> +<span class="normal">573</span> +<span class="normal">574</span> +<span class="normal">575</span> +<span class="normal">576</span> +<span class="normal">577</span> +<span class="normal">578</span> +<span class="normal">579</span> +<span class="normal">580</span> +<span class="normal">581</span> +<span class="normal">582</span> +<span class="normal">583</span> +<span class="normal">584</span> +<span class="normal">585</span> +<span class="normal">586</span> +<span class="normal">587</span> +<span class="normal">588</span> +<span class="normal">589</span> +<span class="normal">590</span> +<span class="normal">591</span> +<span class="normal">592</span> +<span class="normal">593</span> +<span class="normal">594</span> +<span class="normal">595</span> +<span class="normal">596</span> +<span class="normal">597</span> +<span class="normal">598</span> +<span class="normal">599</span> +<span class="normal">600</span> +<span class="normal">601</span> +<span class="normal">602</span> +<span class="normal">603</span> +<span class="normal">604</span> +<span class="normal">605</span> +<span class="normal">606</span> +<span class="normal">607</span> +<span class="normal">608</span> +<span class="normal">609</span> +<span class="normal">610</span> +<span class="normal">611</span> +<span class="normal">612</span> +<span class="normal">613</span> +<span class="normal">614</span> +<span class="normal">615</span> +<span class="normal">616</span> +<span class="normal">617</span> +<span class="normal">618</span> +<span class="normal">619</span> +<span class="normal">620</span> +<span class="normal">621</span> +<span class="normal">622</span> +<span class="normal">623</span> +<span class="normal">624</span> +<span class="normal">625</span> +<span class="normal">626</span> +<span class="normal">627</span> +<span class="normal">628</span> +<span class="normal">629</span> +<span class="normal">630</span> +<span class="normal">631</span> +<span class="normal">632</span> +<span class="normal">633</span> +<span class="normal">634</span> +<span class="normal">635</span> +<span class="normal">636</span> +<span class="normal">637</span> +<span class="normal">638</span> +<span class="normal">639</span> +<span class="normal">640</span> +<span class="normal">641</span> +<span class="normal">642</span> +<span class="normal">643</span> +<span class="normal">644</span> +<span class="normal">645</span> +<span class="normal">646</span> +<span class="normal">647</span> +<span class="normal">648</span> +<span class="normal">649</span> +<span class="normal">650</span> +<span class="normal">651</span> +<span class="normal">652</span> +<span class="normal">653</span> +<span class="normal">654</span> +<span class="normal">655</span> +<span class="normal">656</span> +<span class="normal">657</span> +<span class="normal">658</span> +<span class="normal">659</span> +<span class="normal">660</span> +<span class="normal">661</span> +<span class="normal">662</span> +<span class="normal">663</span> +<span class="normal">664</span> +<span class="normal">665</span> +<span class="normal">666</span> +<span class="normal">667</span> +<span class="normal">668</span> +<span class="normal">669</span> +<span class="normal">670</span> +<span class="normal">671</span> +<span class="normal">672</span> +<span class="normal">673</span> +<span class="normal">674</span> +<span class="normal">675</span> +<span class="normal">676</span> +<span class="normal">677</span> +<span class="normal">678</span> +<span class="normal">679</span> +<span class="normal">680</span> +<span class="normal">681</span> +<span class="normal">682</span> +<span class="normal">683</span> +<span class="normal">684</span> +<span class="normal">685</span> +<span class="normal">686</span> +<span class="normal">687</span> +<span class="normal">688</span> +<span class="normal">689</span> +<span class="normal">690</span> +<span class="normal">691</span> +<span class="normal">692</span> +<span class="normal">693</span> +<span class="normal">694</span> +<span class="normal">695</span> +<span class="normal">696</span> +<span class="normal">697</span> +<span class="normal">698</span> +<span class="normal">699</span> +<span class="normal">700</span> +<span class="normal">701</span> +<span class="normal">702</span> +<span class="normal">703</span> +<span class="normal">704</span> +<span class="normal">705</span> +<span class="normal">706</span> +<span class="normal">707</span> +<span class="normal">708</span> +<span class="normal">709</span> +<span class="normal">710</span> +<span class="normal">711</span> +<span class="normal">712</span> +<span class="normal">713</span> +<span class="normal">714</span> +<span class="normal">715</span> +<span class="normal">716</span> +<span class="normal">717</span> +<span class="normal">718</span> +<span class="normal">719</span> +<span class="normal">720</span> +<span class="normal">721</span> +<span class="normal">722</span> +<span class="normal">723</span> +<span class="normal">724</span> +<span class="normal">725</span> +<span class="normal">726</span> +<span class="normal">727</span> +<span class="normal">728</span> +<span class="normal">729</span> +<span class="normal">730</span> +<span class="normal">731</span> +<span class="normal">732</span> +<span class="normal">733</span> +<span class="normal">734</span> +<span class="normal">735</span> +<span class="normal">736</span> +<span class="normal">737</span> +<span class="normal">738</span> +<span class="normal">739</span> +<span class="normal">740</span> +<span class="normal">741</span> +<span class="normal">742</span> +<span class="normal">743</span> +<span class="normal">744</span> +<span class="normal">745</span> +<span class="normal">746</span> +<span class="normal">747</span> +<span class="normal">748</span> +<span class="normal">749</span> +<span class="normal">750</span> +<span class="normal">751</span> +<span class="normal">752</span> +<span class="normal">753</span> +<span class="normal">754</span> +<span class="normal">755</span> +<span class="normal">756</span> +<span class="normal">757</span> +<span class="normal">758</span> +<span class="normal">759</span> +<span class="normal">760</span> +<span class="normal">761</span> +<span class="normal">762</span> +<span class="normal">763</span> +<span class="normal">764</span> +<span class="normal">765</span> +<span class="normal">766</span> +<span class="normal">767</span> +<span class="normal">768</span> +<span class="normal">769</span> +<span class="normal">770</span> +<span class="normal">771</span> +<span class="normal">772</span> +<span class="normal">773</span> +<span class="normal">774</span> +<span class="normal">775</span> +<span class="normal">776</span> +<span class="normal">777</span> +<span class="normal">778</span> +<span class="normal">779</span> +<span class="normal">780</span> +<span class="normal">781</span> +<span class="normal">782</span> +<span class="normal">783</span> +<span class="normal">784</span> +<span class="normal">785</span> +<span class="normal">786</span> +<span class="normal">787</span> +<span class="normal">788</span> +<span class="normal">789</span> +<span class="normal">790</span> +<span class="normal">791</span> +<span class="normal">792</span> +<span class="normal">793</span> +<span class="normal">794</span> +<span class="normal">795</span> +<span class="normal">796</span> +<span class="normal">797</span> +<span class="normal">798</span> +<span class="normal">799</span> +<span class="normal">800</span> +<span class="normal">801</span> +<span class="normal">802</span> +<span class="normal">803</span> +<span class="normal">804</span> +<span class="normal">805</span> +<span class="normal">806</span> +<span class="normal">807</span> +<span class="normal">808</span> +<span class="normal">809</span> +<span class="normal">810</span> +<span class="normal">811</span> +<span class="normal">812</span> +<span class="normal">813</span> +<span class="normal">814</span> +<span class="normal">815</span> +<span class="normal">816</span> +<span class="normal">817</span> +<span class="normal">818</span> +<span class="normal">819</span> +<span class="normal">820</span> +<span class="normal">821</span> +<span class="normal">822</span> +<span class="normal">823</span> +<span class="normal">824</span> +<span class="normal">825</span> +<span class="normal">826</span> +<span class="normal">827</span> +<span class="normal">828</span> +<span class="normal">829</span> +<span class="normal">830</span> +<span class="normal">831</span> +<span class="normal">832</span> +<span class="normal">833</span> +<span class="normal">834</span> +<span class="normal">835</span> +<span class="normal">836</span> +<span class="normal">837</span> +<span class="normal">838</span> +<span class="normal">839</span> +<span class="normal">840</span> +<span class="normal">841</span> +<span class="normal">842</span> +<span class="normal">843</span> +<span class="normal">844</span> +<span class="normal">845</span> +<span class="normal">846</span> +<span class="normal">847</span> +<span class="normal">848</span> +<span class="normal">849</span> +<span class="normal">850</span> +<span class="normal">851</span> +<span class="normal">852</span> +<span class="normal">853</span> +<span class="normal">854</span> +<span class="normal">855</span> +<span class="normal">856</span> +<span class="normal">857</span> +<span class="normal">858</span> +<span class="normal">859</span> +<span class="normal">860</span> +<span class="normal">861</span> +<span class="normal">862</span> +<span class="normal">863</span> +<span class="normal">864</span> +<span class="normal">865</span> +<span class="normal">866</span> +<span class="normal">867</span> +<span class="normal">868</span> +<span class="normal">869</span> +<span class="normal">870</span> +<span class="normal">871</span> +<span class="normal">872</span> +<span class="normal">873</span> +<span class="normal">874</span> +<span class="normal">875</span> +<span class="normal">876</span> +<span class="normal">877</span> +<span class="normal">878</span> +<span class="normal">879</span> +<span class="normal">880</span> +<span class="normal">881</span> +<span class="normal">882</span> +<span class="normal">883</span> +<span class="normal">884</span> +<span class="normal">885</span> +<span class="normal">886</span> +<span class="normal">887</span> +<span class="normal">888</span> +<span class="normal">889</span> +<span class="normal">890</span> +<span class="normal">891</span> +<span class="normal">892</span> +<span class="normal">893</span> +<span class="normal">894</span> +<span class="normal">895</span> +<span class="normal">896</span> +<span class="normal">897</span> +<span class="normal">898</span> +<span class="normal">899</span> +<span class="normal">900</span> +<span class="normal">901</span> +<span class="normal">902</span> +<span class="normal">903</span> +<span class="normal">904</span> +<span class="normal">905</span> +<span class="normal">906</span> +<span class="normal">907</span> +<span class="normal">908</span> +<span class="normal">909</span> +<span class="normal">910</span> +<span class="normal">911</span> +<span class="normal">912</span> +<span class="normal">913</span> +<span class="normal">914</span> +<span class="normal">915</span> +<span class="normal">916</span> +<span class="normal">917</span> +<span class="normal">918</span> +<span class="normal">919</span> +<span class="normal">920</span> +<span class="normal">921</span> +<span class="normal">922</span> +<span class="normal">923</span> +<span class="normal">924</span> +<span class="normal">925</span> +<span class="normal">926</span> +<span class="normal">927</span> +<span class="normal">928</span> +<span class="normal">929</span> +<span class="normal">930</span> +<span class="normal">931</span> +<span class="normal">932</span> +<span class="normal">933</span> +<span class="normal">934</span> +<span class="normal">935</span> +<span class="normal">936</span> +<span class="normal">937</span> +<span class="normal">938</span> +<span class="normal">939</span> +<span class="normal">940</span> +<span class="normal">941</span> +<span class="normal">942</span> +<span class="normal">943</span> +<span class="normal">944</span> +<span class="normal">945</span> +<span class="normal">946</span> +<span class="normal">947</span> +<span class="normal">948</span> +<span class="normal">949</span> +<span class="normal">950</span> +<span class="normal">951</span> +<span class="normal">952</span> +<span class="normal">953</span> +<span class="normal">954</span> +<span class="normal">955</span> +<span class="normal">956</span> +<span class="normal">957</span> +<span class="normal">958</span> +<span class="normal">959</span> +<span class="normal">960</span> +<span class="normal">961</span> +<span class="normal">962</span> +<span class="normal">963</span> +<span class="normal">964</span> +<span class="normal">965</span> +<span class="normal">966</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * caja-dropbox.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Implements the Caja extension API for Dropbox.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><config.h></span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="cp"></span> +<a id="line-26" name="line-26"></a><span class="cp">#endif</span> +<a id="line-27" name="line-27"></a> +<a id="line-28" name="line-28"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span><span class="cp"></span> +<a id="line-29" name="line-29"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a id="line-30" name="line-30"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/un.h></span><span class="cp"></span> +<a id="line-31" name="line-31"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><errno.h></span><span class="cp"></span> +<a id="line-32" name="line-32"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><unistd.h></span><span class="cp"></span> +<a id="line-33" name="line-33"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><ctype.h></span><span class="cp"></span> +<a id="line-34" name="line-34"></a> +<a id="line-35" name="line-35"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="cp"></span> +<a id="line-36" name="line-36"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib/gprintf.h></span><span class="cp"></span> +<a id="line-37" name="line-37"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib-object.h></span><span class="cp"></span> +<a id="line-38" name="line-38"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtk.h></span><span class="cp"></span> +<a id="line-39" name="line-39"></a> +<a id="line-40" name="line-40"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-extension-types.h></span><span class="cp"></span> +<a id="line-41" name="line-41"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-menu-provider.h></span><span class="cp"></span> +<a id="line-42" name="line-42"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="cp"></span> +<a id="line-43" name="line-43"></a> +<a id="line-44" name="line-44"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"g-util.h"</span><span class="cp"></span> +<a id="line-45" name="line-45"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-command-client.h"</span><span class="cp"></span> +<a id="line-46" name="line-46"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox.h"</span><span class="cp"></span> +<a id="line-47" name="line-47"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a id="line-48" name="line-48"></a> +<a id="line-49" name="line-49"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">emblems</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s">"dropbox-uptodate"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-syncing"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-unsyncable"</span><span class="p">};</span><span class="w"></span> +<a id="line-50" name="line-50"></a><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">EMBLEMDIR</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-51" name="line-51"></a> +<a id="line-52" name="line-52"></a><span class="n">gboolean</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span><span class="w"></span> +<a id="line-53" name="line-53"></a> +<a id="line-54" name="line-54"></a><span class="k">static</span><span class="w"> </span><span class="n">GType</span><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-55" name="line-55"></a> +<a id="line-56" name="line-56"></a><span class="cm">/*</span> +<a id="line-57" name="line-57"></a><span class="cm"> Simplifies a path by removing navigation elements such as '.' and '..'</span> +<a id="line-58" name="line-58"></a> +<a id="line-59" name="line-59"></a><span class="cm"> Arguments:</span> +<a id="line-60" name="line-60"></a><span class="cm"> - path: input path to be canonicalized</span> +<a id="line-61" name="line-61"></a> +<a id="line-62" name="line-62"></a><span class="cm"> Returns:</span> +<a id="line-63" name="line-63"></a><span class="cm"> Canonicalized path if input path is valid.</span> +<a id="line-64" name="line-64"></a><span class="cm"> NULL otherwise.</span> +<a id="line-65" name="line-65"></a><span class="cm">*/</span><span class="w"></span> +<a id="line-66" name="line-66"></a><span class="k">static</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="w"></span> +<a id="line-67" name="line-67"></a><span class="nf">canonicalize_path</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-68" name="line-68"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-69" name="line-69"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-70" name="line-70"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">cpy</span><span class="p">,</span><span class="w"> </span><span class="o">**</span><span class="n">elts</span><span class="p">;</span><span class="w"></span> +<a id="line-71" name="line-71"></a> +<a id="line-72" name="line-72"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-73" name="line-73"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">);</span><span class="w"></span> +<a id="line-74" name="line-74"></a> +<a id="line-75" name="line-75"></a><span class="w"> </span><span class="n">elts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="s">"/"</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span> +<a id="line-76" name="line-76"></a><span class="w"> </span><span class="n">cpy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">g_strv_length</span><span class="p">(</span><span class="n">elts</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-77" name="line-77"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"/"</span><span class="p">;</span><span class="w"></span> +<a id="line-78" name="line-78"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-79" name="line-79"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">".."</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-80" name="line-80"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-81" name="line-81"></a><span class="w"> </span><span class="n">j</span><span class="o">--</span><span class="p">;</span><span class="w"></span> +<a id="line-82" name="line-82"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-83" name="line-83"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-84" name="line-84"></a><span class="w"> </span><span class="c1">// Input path has too many parent directory references and is invalid</span> +<a id="line-85" name="line-85"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-86" name="line-86"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span><span class="w"></span> +<a id="line-87" name="line-87"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-88" name="line-88"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-89" name="line-89"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"."</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-90" name="line-90"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">];</span><span class="w"></span> +<a id="line-91" name="line-91"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-92" name="line-92"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-93" name="line-93"></a> +<a id="line-94" name="line-94"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-95" name="line-95"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_build_filenamev</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span><span class="w"></span> +<a id="line-96" name="line-96"></a> +<a id="line-97" name="line-97"></a><span class="nl">exit</span><span class="p">:</span><span class="w"></span> +<a id="line-98" name="line-98"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span><span class="w"></span> +<a id="line-99" name="line-99"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">elts</span><span class="p">);</span><span class="w"></span> +<a id="line-100" name="line-100"></a> +<a id="line-101" name="line-101"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span><span class="w"></span> +<a id="line-102" name="line-102"></a><span class="p">}</span><span class="w"></span> +<a id="line-103" name="line-103"></a> +<a id="line-104" name="line-104"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-105" name="line-105"></a><span class="nf">reset_file</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-106" name="line-106"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"resetting file %p"</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-107" name="line-107"></a><span class="w"> </span><span class="n">caja_file_info_invalidate_extension_info</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-108" name="line-108"></a><span class="p">}</span><span class="w"></span> +<a id="line-109" name="line-109"></a> +<a id="line-110" name="line-110"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span><span class="w"></span> +<a id="line-111" name="line-111"></a><span class="nf">reset_all_files</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-112" name="line-112"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-113" name="line-113"></a> +<a id="line-114" name="line-114"></a><span class="w"> </span><span class="cm">/* this works because you can call a function pointer with</span> +<a id="line-115" name="line-115"></a><span class="cm"> more arguments than it takes */</span><span class="w"></span> +<a id="line-116" name="line-116"></a><span class="w"> </span><span class="n">g_hash_table_foreach</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GHFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_file</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-117" name="line-117"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-118" name="line-118"></a><span class="p">}</span><span class="w"></span> +<a id="line-119" name="line-119"></a> +<a id="line-120" name="line-120"></a> +<a id="line-121" name="line-121"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-122" name="line-122"></a><span class="nf">when_file_dies</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">address</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-123" name="line-123"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-124" name="line-124"></a> +<a id="line-125" name="line-125"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span><span class="w"></span> +<a id="line-126" name="line-126"></a> +<a id="line-127" name="line-127"></a><span class="w"> </span><span class="cm">/* we never got a change to view this file */</span><span class="w"></span> +<a id="line-128" name="line-128"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-129" name="line-129"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-130" name="line-130"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-131" name="line-131"></a> +<a id="line-132" name="line-132"></a><span class="w"> </span><span class="cm">/* too chatty */</span><span class="w"></span> +<a id="line-133" name="line-133"></a><span class="w"> </span><span class="cm">/* debug("removing %s <-> 0x%p", filename, address); */</span><span class="w"></span> +<a id="line-134" name="line-134"></a> +<a id="line-135" name="line-135"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-136" name="line-136"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span><span class="w"></span> +<a id="line-137" name="line-137"></a><span class="p">}</span><span class="w"></span> +<a id="line-138" name="line-138"></a> +<a id="line-139" name="line-139"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-140" name="line-140"></a><span class="nf">changed_cb</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-141" name="line-141"></a><span class="w"> </span><span class="cm">/* check if this file's path has changed, if so update the hash and invalidate</span> +<a id="line-142" name="line-142"></a><span class="cm"> the file */</span><span class="w"></span> +<a id="line-143" name="line-143"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">;</span><span class="w"></span> +<a id="line-144" name="line-144"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename2</span><span class="p">;</span><span class="w"></span> +<a id="line-145" name="line-145"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span><span class="w"></span> +<a id="line-146" name="line-146"></a> +<a id="line-147" name="line-147"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-148" name="line-148"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-149" name="line-149"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-150" name="line-150"></a> +<a id="line-151" name="line-151"></a><span class="w"> </span><span class="cm">/* Canonicalization will only null-out a non-null filename if it is invalid */</span><span class="w"></span> +<a id="line-152" name="line-152"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">((</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">));</span><span class="w"></span> +<a id="line-153" name="line-153"></a> +<a id="line-154" name="line-154"></a><span class="w"> </span><span class="n">filename2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-155" name="line-155"></a> +<a id="line-156" name="line-156"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-157" name="line-157"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-158" name="line-158"></a> +<a id="line-159" name="line-159"></a><span class="w"> </span><span class="cm">/* if filename2 is NULL we've never seen this file in update_file_info */</span><span class="w"></span> +<a id="line-160" name="line-160"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-161" name="line-161"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-162" name="line-162"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-163" name="line-163"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-164" name="line-164"></a> +<a id="line-165" name="line-165"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-166" name="line-166"></a><span class="w"> </span><span class="cm">/* A file has moved to offline storage. Lets remove it from our tables. */</span><span class="w"></span> +<a id="line-167" name="line-167"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-168" name="line-168"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span><span class="w"></span> +<a id="line-169" name="line-169"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-170" name="line-170"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-171" name="line-171"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-172" name="line-172"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-173" name="line-173"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-174" name="line-174"></a> +<a id="line-175" name="line-175"></a><span class="w"> </span><span class="cm">/* this is a hack, because caja doesn't do this for us, for some reason</span> +<a id="line-176" name="line-176"></a><span class="cm"> the file's path has changed */</span><span class="w"></span> +<a id="line-177" name="line-177"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-178" name="line-178"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shifty old: %s, new %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-179" name="line-179"></a> +<a id="line-180" name="line-180"></a><span class="w"> </span><span class="cm">/* gotta do this first, the call after this frees filename2 */</span><span class="w"></span> +<a id="line-181" name="line-181"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span><span class="w"></span> +<a id="line-182" name="line-182"></a> +<a id="line-183" name="line-183"></a><span class="w"> </span><span class="n">g_hash_table_replace</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span><span class="w"></span> +<a id="line-184" name="line-184"></a> +<a id="line-185" name="line-185"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-186" name="line-186"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span><span class="w"></span> +<a id="line-187" name="line-187"></a><span class="w"> </span><span class="cm">/* we shouldn't have another mapping from filename to an object */</span><span class="w"></span> +<a id="line-188" name="line-188"></a><span class="w"> </span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-189" name="line-189"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">f2</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-190" name="line-190"></a><span class="w"> </span><span class="cm">/* lets fix it if it's true, just remove the mapping */</span><span class="w"></span> +<a id="line-191" name="line-191"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-192" name="line-192"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span><span class="w"></span> +<a id="line-193" name="line-193"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-194" name="line-194"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-195" name="line-195"></a> +<a id="line-196" name="line-196"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-197" name="line-197"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-198" name="line-198"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-199" name="line-199"></a> +<a id="line-200" name="line-200"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-201" name="line-201"></a><span class="p">}</span><span class="w"></span> +<a id="line-202" name="line-202"></a> +<a id="line-203" name="line-203"></a><span class="k">static</span><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"></span> +<a id="line-204" name="line-204"></a><span class="nf">caja_dropbox_update_file_info</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-205" name="line-205"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"></span> +<a id="line-206" name="line-206"></a><span class="w"> </span><span class="n">GClosure</span><span class="w"> </span><span class="o">*</span><span class="n">update_complete</span><span class="p">,</span><span class="w"></span> +<a id="line-207" name="line-207"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">**</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-208" name="line-208"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">;</span><span class="w"></span> +<a id="line-209" name="line-209"></a> +<a id="line-210" name="line-210"></a><span class="w"> </span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-211" name="line-211"></a> +<a id="line-212" name="line-212"></a><span class="w"> </span><span class="cm">/* this code adds this file object to our two-way hash of file objects</span> +<a id="line-213" name="line-213"></a><span class="cm"> so we can shell touch these files later */</span><span class="w"></span> +<a id="line-214" name="line-214"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-215" name="line-215"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span><span class="w"></span> +<a id="line-216" name="line-216"></a> +<a id="line-217" name="line-217"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-218" name="line-218"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-219" name="line-219"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-220" name="line-220"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-221" name="line-221"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-222" name="line-222"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-223" name="line-223"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-224" name="line-224"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-225" name="line-225"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">stored_filename</span><span class="p">;</span><span class="w"></span> +<a id="line-226" name="line-226"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-227" name="line-227"></a> +<a id="line-228" name="line-228"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-229" name="line-229"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-230" name="line-230"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-231" name="line-231"></a><span class="w"> </span><span class="cm">/* pfilename path was invalid if canonicalize operation nulled it out */</span><span class="w"></span> +<a id="line-232" name="line-232"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span><span class="w"></span> +<a id="line-233" name="line-233"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-234" name="line-234"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-235" name="line-235"></a> +<a id="line-236" name="line-236"></a><span class="w"> </span><span class="cm">/* don't worry about the dup checks, gcc is smart enough to optimize this</span> +<a id="line-237" name="line-237"></a><span class="cm"> GCSE ftw */</span><span class="w"></span> +<a id="line-238" name="line-238"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">strcmp</span><span class="p">(</span><span class="n">stored_filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-239" name="line-239"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-240" name="line-240"></a> +<a id="line-241" name="line-241"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-242" name="line-242"></a><span class="w"> </span><span class="cm">/* this happens when the filename changes name on a file obj</span> +<a id="line-243" name="line-243"></a><span class="cm"> but changed_cb isn't called */</span><span class="w"></span> +<a id="line-244" name="line-244"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-245" name="line-245"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-246" name="line-246"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">stored_filename</span><span class="p">);</span><span class="w"></span> +<a id="line-247" name="line-247"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-248" name="line-248"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-249" name="line-249"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-250" name="line-250"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span><span class="w"></span> +<a id="line-251" name="line-251"></a> +<a id="line-252" name="line-252"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-253" name="line-253"></a><span class="w"> </span><span class="cm">/* if the filename exists in the filename2obj hash</span> +<a id="line-254" name="line-254"></a><span class="cm"> but the file obj doesn't exist in the obj2filename hash:</span> +<a id="line-255" name="line-255"></a> +<a id="line-256" name="line-256"></a><span class="cm"> this happens when caja allocates another file object</span> +<a id="line-257" name="line-257"></a><span class="cm"> for a filename without first deleting the original file object</span> +<a id="line-258" name="line-258"></a> +<a id="line-259" name="line-259"></a><span class="cm"> just remove the association to the older file object, it's obsolete</span> +<a id="line-260" name="line-260"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-261" name="line-261"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">f2</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-262" name="line-262"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">f2</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-263" name="line-263"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-264" name="line-264"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span><span class="w"></span> +<a id="line-265" name="line-265"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-266" name="line-266"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-267" name="line-267"></a> +<a id="line-268" name="line-268"></a><span class="w"> </span><span class="cm">/* too chatty */</span><span class="w"></span> +<a id="line-269" name="line-269"></a><span class="w"> </span><span class="cm">/* debug("adding %s <-> 0x%p", filename, file);*/</span><span class="w"></span> +<a id="line-270" name="line-270"></a><span class="w"> </span><span class="n">g_object_weak_ref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-271" name="line-271"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-272" name="line-272"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span><span class="w"></span> +<a id="line-273" name="line-273"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"changed"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-274" name="line-274"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-275" name="line-275"></a> +<a id="line-276" name="line-276"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-277" name="line-277"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-278" name="line-278"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-279" name="line-279"></a> +<a id="line-280" name="line-280"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">))</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-281" name="line-281"></a><span class="w"> </span><span class="n">caja_file_info_is_gone</span><span class="p">(</span><span class="n">file</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-282" name="line-282"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-283" name="line-283"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-284" name="line-284"></a> +<a id="line-285" name="line-285"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-286" name="line-286"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-287" name="line-287"></a> +<a id="line-288" name="line-288"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-289" name="line-289"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">provider</span><span class="p">;</span><span class="w"></span> +<a id="line-290" name="line-290"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GET_FILE_INFO</span><span class="p">;</span><span class="w"></span> +<a id="line-291" name="line-291"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_closure_ref</span><span class="p">(</span><span class="n">update_complete</span><span class="p">);</span><span class="w"></span> +<a id="line-292" name="line-292"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_ref</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-293" name="line-293"></a> +<a id="line-294" name="line-294"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">);</span><span class="w"></span> +<a id="line-295" name="line-295"></a> +<a id="line-296" name="line-296"></a><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">;</span><span class="w"></span> +<a id="line-297" name="line-297"></a> +<a id="line-298" name="line-298"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="w"></span> +<a id="line-299" name="line-299"></a><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="w"></span> +<a id="line-300" name="line-300"></a><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">CAJA_OPERATION_IN_PROGRESS</span><span class="p">;</span><span class="w"></span> +<a id="line-301" name="line-301"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-302" name="line-302"></a><span class="p">}</span><span class="w"></span> +<a id="line-303" name="line-303"></a> +<a id="line-304" name="line-304"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-305" name="line-305"></a><span class="nf">handle_shell_touch</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-306" name="line-306"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">path</span><span class="p">;</span><span class="w"></span> +<a id="line-307" name="line-307"></a> +<a id="line-308" name="line-308"></a><span class="w"> </span><span class="c1">// debug_enter();</span> +<a id="line-309" name="line-309"></a> +<a id="line-310" name="line-310"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-311" name="line-311"></a><span class="w"> </span><span class="n">path</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="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-312" name="line-312"></a><span class="hll"><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">;</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'file' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-313" name="line-313"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-314" name="line-314"></a> +<a id="line-315" name="line-315"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span><span class="w"></span> +<a id="line-316" name="line-316"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-317" name="line-317"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shell touch for %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-318" name="line-318"></a> +<a id="line-319" name="line-319"></a><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-320" name="line-320"></a> +<a id="line-321" name="line-321"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-322" name="line-322"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"gonna reset %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-323" name="line-323"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-324" name="line-324"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-325" name="line-325"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-326" name="line-326"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-327" name="line-327"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-328" name="line-328"></a> +<a id="line-329" name="line-329"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-330" name="line-330"></a><span class="p">}</span><span class="w"></span> +<a id="line-331" name="line-331"></a> +<a id="line-332" name="line-332"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-333" name="line-333"></a><span class="nf">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dficr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-334" name="line-334"></a> +<a id="line-335" name="line-335"></a><span class="w"> </span><span class="c1">//debug_enter();</span> +<a id="line-336" name="line-336"></a><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span><span class="w"></span> +<a id="line-337" name="line-337"></a> +<a id="line-338" name="line-338"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-339" name="line-339"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-340" name="line-340"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">isdir</span><span class="p">;</span><span class="w"></span> +<a id="line-341" name="line-341"></a> +<a id="line-342" name="line-342"></a><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">;</span><span class="w"></span> +<a id="line-343" name="line-343"></a> +<a id="line-344" name="line-344"></a><span class="w"> </span><span class="cm">/* if we have emblems just use them. */</span><span class="w"></span> +<a id="line-345" name="line-345"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-346" name="line-346"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">"emblems"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-347" name="line-347"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-348" name="line-348"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-349" name="line-349"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"></span> +<a id="line-350" name="line-350"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-351" name="line-351"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-352" name="line-352"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-353" name="line-353"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-354" name="line-354"></a><span class="w"> </span><span class="cm">/* if the file status command went okay */</span><span class="w"></span> +<a id="line-355" name="line-355"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-356" name="line-356"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"></span> +<a id="line-357" name="line-357"></a><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">"status"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-358" name="line-358"></a><span class="w"> </span><span class="p">((</span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">TRUE</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-359" name="line-359"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-360" name="line-360"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-361" name="line-361"></a> +<a id="line-362" name="line-362"></a><span class="w"> </span><span class="cm">/* set the tag emblem */</span><span class="w"></span> +<a id="line-363" name="line-363"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">isdir</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-364" name="line-364"></a><span class="w"> </span><span class="p">(</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">"tag"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-365" name="line-365"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-366" name="line-366"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"web"</span><span class="p">);</span><span class="w"></span> +<a id="line-367" name="line-367"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-368" name="line-368"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"shared"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-369" name="line-369"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"people"</span><span class="p">);</span><span class="w"></span> +<a id="line-370" name="line-370"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-371" name="line-371"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"photos"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-372" name="line-372"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"photos"</span><span class="p">);</span><span class="w"></span> +<a id="line-373" name="line-373"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-374" name="line-374"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"sandbox"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-375" name="line-375"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"star"</span><span class="p">);</span><span class="w"></span> +<a id="line-376" name="line-376"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-377" name="line-377"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-378" name="line-378"></a> +<a id="line-379" name="line-379"></a><span class="w"> </span><span class="cm">/* set the status emblem */</span><span class="w"></span> +<a id="line-380" name="line-380"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-381" name="line-381"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-382" name="line-382"></a> +<a id="line-383" name="line-383"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"up to date"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-384" name="line-384"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"></span> +<a id="line-385" name="line-385"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-386" name="line-386"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"syncing"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-387" name="line-387"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"></span> +<a id="line-388" name="line-388"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-389" name="line-389"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"unsyncable"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-390" name="line-390"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"></span> +<a id="line-391" name="line-391"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-392" name="line-392"></a> +<a id="line-393" name="line-393"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_code</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-394" name="line-394"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-395" name="line-395"></a><span class="cm"> debug("%s to %s", emblems[emblem_code-1],</span> +<a id="line-396" name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr->dfic->file),</span> +<a id="line-397" name="line-397"></a><span class="cm"> NULL, NULL));</span> +<a id="line-398" name="line-398"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-399" name="line-399"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">emblems</span><span class="p">[</span><span class="n">emblem_code</span><span class="mi">-1</span><span class="p">]);</span><span class="w"></span> +<a id="line-400" name="line-400"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-401" name="line-401"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-402" name="line-402"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-403" name="line-403"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-404" name="line-404"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-405" name="line-405"></a> +<a id="line-406" name="line-406"></a><span class="w"> </span><span class="cm">/* complete the info request */</span><span class="w"></span> +<a id="line-407" name="line-407"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-408" name="line-408"></a><span class="w"> </span><span class="n">caja_info_provider_update_complete_invoke</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">,</span><span class="w"></span> +<a id="line-409" name="line-409"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-410" name="line-410"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">,</span><span class="w"></span> +<a id="line-411" name="line-411"></a><span class="w"> </span><span class="n">result</span><span class="p">);</span><span class="w"></span> +<a id="line-412" name="line-412"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-413" name="line-413"></a> +<a id="line-414" name="line-414"></a><span class="w"> </span><span class="cm">/* destroy the objects we created */</span><span class="w"></span> +<a id="line-415" name="line-415"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-416" name="line-416"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">);</span><span class="w"></span> +<a id="line-417" name="line-417"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-418" name="line-418"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">);</span><span class="w"></span> +<a id="line-419" name="line-419"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-420" name="line-420"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">);</span><span class="w"></span> +<a id="line-421" name="line-421"></a> +<a id="line-422" name="line-422"></a><span class="w"> </span><span class="cm">/* unref the objects we didn't create */</span><span class="w"></span> +<a id="line-423" name="line-423"></a><span class="w"> </span><span class="n">g_closure_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">);</span><span class="w"></span> +<a id="line-424" name="line-424"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-425" name="line-425"></a> +<a id="line-426" name="line-426"></a><span class="w"> </span><span class="cm">/* now free the structs */</span><span class="w"></span> +<a id="line-427" name="line-427"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">);</span><span class="w"></span> +<a id="line-428" name="line-428"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="p">);</span><span class="w"></span> +<a id="line-429" name="line-429"></a> +<a id="line-430" name="line-430"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-431" name="line-431"></a><span class="p">}</span><span class="w"></span> +<a id="line-432" name="line-432"></a> +<a id="line-433" name="line-433"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-434" name="line-434"></a><span class="nf">caja_dropbox_cancel_update</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-435" name="line-435"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-436" name="line-436"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">handle</span><span class="p">;</span><span class="w"></span> +<a id="line-437" name="line-437"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-438" name="line-438"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-439" name="line-439"></a><span class="p">}</span><span class="w"></span> +<a id="line-440" name="line-440"></a> +<a id="line-441" name="line-441"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-442" name="line-442"></a><span class="nf">menu_item_cb</span><span class="p">(</span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">,</span><span class="w"></span> +<a id="line-443" name="line-443"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-444" name="line-444"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">verb</span><span class="p">;</span><span class="w"></span> +<a id="line-445" name="line-445"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">;</span><span class="w"></span> +<a id="line-446" name="line-446"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dcac</span><span class="p">;</span><span class="w"></span> +<a id="line-447" name="line-447"></a> +<a id="line-448" name="line-448"></a><span class="w"> </span><span class="n">dcac</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-449" name="line-449"></a> +<a id="line-450" name="line-450"></a><span class="w"> </span><span class="cm">/* maybe these would be better passed in a container</span> +<a id="line-451" name="line-451"></a><span class="cm"> struct used as the userdata pointer, oh well this</span> +<a id="line-452" name="line-452"></a><span class="cm"> is how dave camp does it */</span><span class="w"></span> +<a id="line-453" name="line-453"></a><span class="w"> </span><span class="n">files</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">);</span><span class="w"></span> +<a id="line-454" name="line-454"></a><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">);</span><span class="w"></span> +<a id="line-455" name="line-455"></a> +<a id="line-456" name="line-456"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span><span class="w"></span> +<a id="line-457" name="line-457"></a> +<a id="line-458" name="line-458"></a><span class="w"> </span><span class="cm">/* build the argument list */</span><span class="w"></span> +<a id="line-459" name="line-459"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-460" name="line-460"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-461" name="line-461"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-462" name="line-462"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span><span class="w"></span> +<a id="line-463" name="line-463"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-464" name="line-464"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span><span class="w"></span> +<a id="line-465" name="line-465"></a><span class="w"> </span><span class="n">guint</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-466" name="line-466"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">li</span><span class="p">;</span><span class="w"></span> +<a id="line-467" name="line-467"></a> +<a id="line-468" name="line-468"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-469" name="line-469"></a> +<a id="line-470" name="line-470"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-471" name="line-471"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">CAJA_FILE_INFO</span><span class="p">(</span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">));</span><span class="w"></span> +<a id="line-472" name="line-472"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-473" name="line-473"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-474" name="line-474"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">path</span><span class="p">)</span><span class="w"></span> +<a id="line-475" name="line-475"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"></span> +<a id="line-476" name="line-476"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">path</span><span class="p">;</span><span class="w"></span> +<a id="line-477" name="line-477"></a><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-478" name="line-478"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-479" name="line-479"></a> +<a id="line-480" name="line-480"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"></span> +<a id="line-481" name="line-481"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"></span> +<a id="line-482" name="line-482"></a><span class="w"> </span><span class="n">arglist</span><span class="p">);</span><span class="w"></span> +<a id="line-483" name="line-483"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-484" name="line-484"></a> +<a id="line-485" name="line-485"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-486" name="line-486"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span><span class="w"></span> +<a id="line-487" name="line-487"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w"></span> +<a id="line-488" name="line-488"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">);</span><span class="w"></span> +<a id="line-489" name="line-489"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-490" name="line-490"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"verb"</span><span class="p">),</span><span class="w"> </span><span class="n">arglist</span><span class="p">);</span><span class="w"></span> +<a id="line-491" name="line-491"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-492" name="line-492"></a> +<a id="line-493" name="line-493"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_action"</span><span class="p">);</span><span class="w"></span> +<a id="line-494" name="line-494"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-495" name="line-495"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-496" name="line-496"></a> +<a id="line-497" name="line-497"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dcac</span><span class="p">);</span><span class="w"></span> +<a id="line-498" name="line-498"></a><span class="p">}</span><span class="w"></span> +<a id="line-499" name="line-499"></a> +<a id="line-500" name="line-500"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="nf">from_hex</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-501" name="line-501"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">isdigit</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">ch</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'0'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">tolower</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'a'</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"></span> +<a id="line-502" name="line-502"></a><span class="p">}</span><span class="w"></span> +<a id="line-503" name="line-503"></a> +<a id="line-504" name="line-504"></a><span class="c1">// decode in --> out, but dont fill more than n chars into out</span> +<a id="line-505" name="line-505"></a><span class="c1">// returns len of out if thing went well, -1 if n wasn't big enough</span> +<a id="line-506" name="line-506"></a><span class="c1">// can be used in place (whoa!)</span> +<a id="line-507" name="line-507"></a><span class="kt">int</span><span class="w"> </span><span class="nf">GhettoURLDecode</span><span class="p">(</span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-508" name="line-508"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">out_initial</span><span class="p">;</span><span class="w"></span> +<a id="line-509" name="line-509"></a> +<a id="line-510" name="line-510"></a><span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="n">out_initial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">out</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-511" name="line-511"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'%'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-512" name="line-512"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-513" name="line-513"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span><span class="w"></span> +<a id="line-514" name="line-514"></a><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"></span> +<a id="line-515" name="line-515"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-516" name="line-516"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-517" name="line-517"></a><span class="w"> </span><span class="c1">// Input string isn't well-formed</span> +<a id="line-518" name="line-518"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span> +<a id="line-519" name="line-519"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-520" name="line-520"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-521" name="line-521"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-522" name="line-522"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="p">;</span><span class="w"></span> +<a id="line-523" name="line-523"></a><span class="w"> </span><span class="n">in</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-524" name="line-524"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-525" name="line-525"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-526" name="line-526"></a> +<a id="line-527" name="line-527"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-528" name="line-528"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"></span> +<a id="line-529" name="line-529"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="p">;</span><span class="w"></span> +<a id="line-530" name="line-530"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-531" name="line-531"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span> +<a id="line-532" name="line-532"></a><span class="p">}</span><span class="w"></span> +<a id="line-533" name="line-533"></a> +<a id="line-534" name="line-534"></a><span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"></span> +<a id="line-535" name="line-535"></a><span class="nf">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">,</span><span class="w"></span> +<a id="line-536" name="line-536"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">menu</span><span class="p">,</span><span class="w"></span> +<a id="line-537" name="line-537"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">old_action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-538" name="line-538"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="p">,</span><span class="w"></span> +<a id="line-539" name="line-539"></a><span class="w"> </span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-540" name="line-540"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span><span class="w"></span> +<a id="line-541" name="line-541"></a><span class="p">{</span><span class="w"></span> +<a id="line-542" name="line-542"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-543" name="line-543"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-544" name="line-544"></a> +<a id="line-545" name="line-545"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-546" name="line-546"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">option_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"~"</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span><span class="w"></span> +<a id="line-547" name="line-547"></a><span class="w"> </span><span class="cm">/* if this is a valid string */</span><span class="w"></span> +<a id="line-548" name="line-548"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-549" name="line-549"></a><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-550" name="line-550"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span><span class="w"></span> +<a id="line-551" name="line-551"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"></span> +<a id="line-552" name="line-552"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-553" name="line-553"></a> +<a id="line-554" name="line-554"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"></span> +<a id="line-555" name="line-555"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_inner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span><span class="w"></span> +<a id="line-556" name="line-556"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span><span class="w"></span> +<a id="line-557" name="line-557"></a> +<a id="line-558" name="line-558"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_name</span><span class="p">));</span><span class="w"></span> +<a id="line-559" name="line-559"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">verb</span><span class="p">));</span><span class="w"></span> +<a id="line-560" name="line-560"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_inner</span><span class="p">));</span><span class="w"></span> +<a id="line-561" name="line-561"></a> +<a id="line-562" name="line-562"></a><span class="w"> </span><span class="c1">// If the inner section has a menu in it then we create a submenu. The verb will be ignored.</span> +<a id="line-563" name="line-563"></a><span class="w"> </span><span class="c1">// Otherwise add the verb to our map and add the menu item to the list.</span> +<a id="line-564" name="line-564"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="sc">'~'</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-565" name="line-565"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span><span class="w"></span> +<a id="line-566" name="line-566"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">suboptions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="s">"|"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span><span class="w"></span> +<a id="line-567" name="line-567"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span><span class="w"></span> +<a id="line-568" name="line-568"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">submenu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span><span class="w"></span> +<a id="line-569" name="line-569"></a> +<a id="line-570" name="line-570"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">);</span><span class="w"></span> +<a id="line-571" name="line-571"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="s">"::"</span><span class="p">);</span><span class="w"></span> +<a id="line-572" name="line-572"></a> +<a id="line-573" name="line-573"></a><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">suboptions</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">,</span><span class="w"> </span><span class="n">new_action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-574" name="line-574"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">);</span><span class="w"></span> +<a id="line-575" name="line-575"></a> +<a id="line-576" name="line-576"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"></span> +<a id="line-577" name="line-577"></a><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="s">""</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-578" name="line-578"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">);</span><span class="w"></span> +<a id="line-579" name="line-579"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-580" name="line-580"></a> +<a id="line-581" name="line-581"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">suboptions</span><span class="p">);</span><span class="w"></span> +<a id="line-582" name="line-582"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-583" name="line-583"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">submenu</span><span class="p">);</span><span class="w"></span> +<a id="line-584" name="line-584"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-585" name="line-585"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-586" name="line-586"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span><span class="w"></span> +<a id="line-587" name="line-587"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span><span class="w"></span> +<a id="line-588" name="line-588"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-589" name="line-589"></a> +<a id="line-590" name="line-590"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">);</span><span class="w"></span> +<a id="line-591" name="line-591"></a> +<a id="line-592" name="line-592"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">item_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'!'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-593" name="line-593"></a><span class="w"> </span><span class="n">item_name</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-594" name="line-594"></a><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-595" name="line-595"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-596" name="line-596"></a> +<a id="line-597" name="line-597"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-598" name="line-598"></a> +<a id="line-599" name="line-599"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-600" name="line-600"></a><span class="w"> </span><span class="cm">/* add the file metadata to this item */</span><span class="w"></span> +<a id="line-601" name="line-601"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">,</span><span class="w"></span> +<a id="line-602" name="line-602"></a><span class="w"> </span><span class="n">caja_file_info_list_copy</span><span class="w"> </span><span class="p">(</span><span class="n">files</span><span class="p">),</span><span class="w"></span> +<a id="line-603" name="line-603"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">caja_file_info_list_free</span><span class="p">);</span><span class="w"></span> +<a id="line-604" name="line-604"></a><span class="w"> </span><span class="cm">/* add the verb metadata */</span><span class="w"></span> +<a id="line-605" name="line-605"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">,</span><span class="w"></span> +<a id="line-606" name="line-606"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">),</span><span class="w"></span> +<a id="line-607" name="line-607"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span><span class="w"></span> +<a id="line-608" name="line-608"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="w"> </span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="s">"activate"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="w"> </span><span class="p">(</span><span class="n">menu_item_cb</span><span class="p">),</span><span class="w"> </span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-609" name="line-609"></a> +<a id="line-610" name="line-610"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">grayed_out</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-611" name="line-611"></a><span class="w"> </span><span class="n">GValue</span><span class="w"> </span><span class="n">sensitive</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-612" name="line-612"></a><span class="w"> </span><span class="n">g_value_init</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">G_TYPE_BOOLEAN</span><span class="p">);</span><span class="w"></span> +<a id="line-613" name="line-613"></a><span class="w"> </span><span class="n">g_value_set_boolean</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span><span class="w"></span> +<a id="line-614" name="line-614"></a><span class="w"> </span><span class="n">g_object_set_property</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"sensitive"</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">sensitive</span><span class="p">);</span><span class="w"></span> +<a id="line-615" name="line-615"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-616" name="line-616"></a> +<a id="line-617" name="line-617"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-618" name="line-618"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-619" name="line-619"></a><span class="w"> </span><span class="n">ret</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-620" name="line-620"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-621" name="line-621"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span><span class="w"></span> +<a id="line-622" name="line-622"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-623" name="line-623"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span><span class="w"></span> +<a id="line-624" name="line-624"></a><span class="p">}</span><span class="w"></span> +<a id="line-625" name="line-625"></a> +<a id="line-626" name="line-626"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-627" name="line-627"></a><span class="nf">get_file_items_callback</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"></span> +<a id="line-628" name="line-628"></a><span class="p">{</span><span class="w"></span> +<a id="line-629" name="line-629"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span><span class="w"></span> +<a id="line-630" name="line-630"></a> +<a id="line-631" name="line-631"></a><span class="w"> </span><span class="cm">/* queue_push doesn't accept NULL as a value so we create an empty hash table</span> +<a id="line-632" name="line-632"></a><span class="cm"> * if we got no response. */</span><span class="w"></span> +<a id="line-633" name="line-633"></a><span class="w"> </span><span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">response</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"></span> +<a id="line-634" name="line-634"></a><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">));</span><span class="w"></span> +<a id="line-635" name="line-635"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-636" name="line-636"></a><span class="p">}</span><span class="w"></span> +<a id="line-637" name="line-637"></a> +<a id="line-638" name="line-638"></a> +<a id="line-639" name="line-639"></a><span class="k">static</span><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="w"></span> +<a id="line-640" name="line-640"></a><span class="nf">caja_dropbox_get_file_items</span><span class="p">(</span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-641" name="line-641"></a><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">window</span><span class="p">,</span><span class="w"></span> +<a id="line-642" name="line-642"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span><span class="w"></span> +<a id="line-643" name="line-643"></a><span class="p">{</span><span class="w"></span> +<a id="line-644" name="line-644"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-645" name="line-645"></a><span class="cm"> * 1. Convert files to filenames.</span> +<a id="line-646" name="line-646"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-647" name="line-647"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">);</span><span class="w"></span> +<a id="line-648" name="line-648"></a> +<a id="line-649" name="line-649"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file_count</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"></span> +<a id="line-650" name="line-650"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-651" name="line-651"></a> +<a id="line-652" name="line-652"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-653" name="line-653"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-654" name="line-654"></a><span class="w"> </span><span class="n">GList</span><span class="o">*</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"></span> +<a id="line-655" name="line-655"></a> +<a id="line-656" name="line-656"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elem</span><span class="o">-></span><span class="n">next</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-657" name="line-657"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">elem</span><span class="o">-></span><span class="n">data</span><span class="p">);</span><span class="w"></span> +<a id="line-658" name="line-658"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename_un</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-659" name="line-659"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename_un</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-660" name="line-660"></a> +<a id="line-661" name="line-661"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-662" name="line-662"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span><span class="w"></span> +<a id="line-663" name="line-663"></a> +<a id="line-664" name="line-664"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-665" name="line-665"></a><span class="w"> </span><span class="cm">/* oooh, filename wasn't correctly encoded, or isn't a local file. */</span><span class="w"></span> +<a id="line-666" name="line-666"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-667" name="line-667"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-668" name="line-668"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-669" name="line-669"></a> +<a id="line-670" name="line-670"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-671" name="line-671"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-672" name="line-672"></a> +<a id="line-673" name="line-673"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_new_full</span><span class="p">((</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="n">g_hash_table_unref</span><span class="p">);</span><span class="w"></span> +<a id="line-674" name="line-674"></a> +<a id="line-675" name="line-675"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-676" name="line-676"></a><span class="cm"> * 2. Create a DropboxGeneralCommand to call "icon_overlay_context_options"</span> +<a id="line-677" name="line-677"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-678" name="line-678"></a> +<a id="line-679" name="line-679"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-680" name="line-680"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span><span class="w"></span> +<a id="line-681" name="line-681"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_options"</span><span class="p">);</span><span class="w"></span> +<a id="line-682" name="line-682"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-683" name="line-683"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-684" name="line-684"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-685" name="line-685"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span><span class="w"></span> +<a id="line-686" name="line-686"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"> </span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-687" name="line-687"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">get_file_items_callback</span><span class="p">;</span><span class="w"></span> +<a id="line-688" name="line-688"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_ref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-689" name="line-689"></a> +<a id="line-690" name="line-690"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-691" name="line-691"></a><span class="cm"> * 3. Queue it up for the helper thread to run it.</span> +<a id="line-692" name="line-692"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-693" name="line-693"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-694" name="line-694"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dgc</span><span class="p">);</span><span class="w"></span> +<a id="line-695" name="line-695"></a> +<a id="line-696" name="line-696"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-697" name="line-697"></a><span class="cm"> * 4. We have to block until it's done because caja expects a reply. But we will</span> +<a id="line-698" name="line-698"></a><span class="cm"> * only block for 50 ms for a reply.</span> +<a id="line-699" name="line-699"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-700" name="line-700"></a> +<a id="line-701" name="line-701"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">context_options_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="mi">50000</span><span class="p">);</span><span class="w"></span> +<a id="line-702" name="line-702"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-703" name="line-703"></a> +<a id="line-704" name="line-704"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">context_options_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-705" name="line-705"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-706" name="line-706"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-707" name="line-707"></a> +<a id="line-708" name="line-708"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-709" name="line-709"></a><span class="cm"> * 5. Parse the reply.</span> +<a id="line-710" name="line-710"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-711" name="line-711"></a> +<a id="line-712" name="line-712"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">,</span><span class="w"> </span><span class="s">"options"</span><span class="p">);</span><span class="w"></span> +<a id="line-713" name="line-713"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-714" name="line-714"></a> +<a id="line-715" name="line-715"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-716" name="line-716"></a><span class="w"> </span><span class="cm">/* build the menu */</span><span class="w"></span> +<a id="line-717" name="line-717"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">root_item</span><span class="p">;</span><span class="w"></span> +<a id="line-718" name="line-718"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">root_menu</span><span class="p">;</span><span class="w"></span> +<a id="line-719" name="line-719"></a> +<a id="line-720" name="line-720"></a><span class="w"> </span><span class="n">root_menu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span><span class="w"></span> +<a id="line-721" name="line-721"></a><span class="w"> </span><span class="n">root_item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="s">"CajaDropbox::root_item"</span><span class="p">,</span><span class="w"></span> +<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">"Dropbox"</span><span class="p">,</span><span class="w"> </span><span class="s">"Dropbox Options"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox"</span><span class="p">);</span><span class="w"></span> +<a id="line-723" name="line-723"></a> +<a id="line-724" name="line-724"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_append</span><span class="p">(</span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">root_item</span><span class="p">);</span><span class="w"></span> +<a id="line-725" name="line-725"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="s">"CajaDropbox::"</span><span class="p">);</span><span class="w"></span> +<a id="line-726" name="line-726"></a> +<a id="line-727" name="line-727"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">options</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">,</span><span class="w"> </span><span class="n">action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-728" name="line-728"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-729" name="line-729"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">toret</span><span class="p">);</span><span class="w"></span> +<a id="line-730" name="line-730"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-731" name="line-731"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-732" name="line-732"></a> +<a id="line-733" name="line-733"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">root_item</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">);</span><span class="w"></span> +<a id="line-734" name="line-734"></a> +<a id="line-735" name="line-735"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-736" name="line-736"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">root_menu</span><span class="p">);</span><span class="w"></span> +<a id="line-737" name="line-737"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-738" name="line-738"></a> +<a id="line-739" name="line-739"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">);</span><span class="w"></span> +<a id="line-740" name="line-740"></a> +<a id="line-741" name="line-741"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span><span class="w"></span> +<a id="line-742" name="line-742"></a><span class="p">}</span><span class="w"></span> +<a id="line-743" name="line-743"></a> +<a id="line-744" name="line-744"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-745" name="line-745"></a><span class="nf">add_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-746" name="line-746"></a><span class="p">{</span><span class="w"></span> +<a id="line-747" name="line-747"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-748" name="line-748"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-749" name="line-749"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-750" name="line-750"></a> +<a id="line-751" name="line-751"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="p">;</span><span class="w"></span> +<a id="line-752" name="line-752"></a><span class="hll"><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-753" name="line-753"></a> +<a id="line-754" name="line-754"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="n">theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span><span class="w"></span> +<a id="line-755" name="line-755"></a> +<a id="line-756" name="line-756"></a><span class="hll"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">&&</span><span class="w"></span><span class="error2"><--- Condition 'emblem_paths_response' is always true</span> +</span><a id="line-757" name="line-757"></a><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-758" name="line-758"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-759" name="line-759"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"></span> +<a id="line-760" name="line-760"></a><span class="w"> </span><span class="n">gtk_icon_theme_append_search_path</span><span class="p">(</span><span class="n">theme</span><span class="p">,</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-761" name="line-761"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-762" name="line-762"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-763" name="line-763"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-764" name="line-764"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-765" name="line-765"></a><span class="p">}</span><span class="w"></span> +<a id="line-766" name="line-766"></a> +<a id="line-767" name="line-767"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-768" name="line-768"></a><span class="nf">remove_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-769" name="line-769"></a><span class="p">{</span><span class="w"></span> +<a id="line-770" name="line-770"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-771" name="line-771"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-772" name="line-772"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-773" name="line-773"></a> +<a id="line-774" name="line-774"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">);</span><span class="w"></span> +<a id="line-775" name="line-775"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_list</span><span class="p">)</span><span class="w"></span> +<a id="line-776" name="line-776"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span><span class="w"></span> +<a id="line-777" name="line-777"></a> +<a id="line-778" name="line-778"></a><span class="w"> </span><span class="c1">// We need to remove the old paths.</span> +<a id="line-779" name="line-779"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">icon_theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span><span class="w"></span> +<a id="line-780" name="line-780"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="w"> </span><span class="n">paths</span><span class="p">;</span><span class="w"></span> +<a id="line-781" name="line-781"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"></span> +<a id="line-782" name="line-782"></a> +<a id="line-783" name="line-783"></a><span class="w"> </span><span class="n">gtk_icon_theme_get_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">path_count</span><span class="p">);</span><span class="w"></span> +<a id="line-784" name="line-784"></a> +<a id="line-785" name="line-785"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-786" name="line-786"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-787" name="line-787"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-788" name="line-788"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-789" name="line-789"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-790" name="line-790"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-791" name="line-791"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">g_strcmp0</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-792" name="line-792"></a><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-793" name="line-793"></a><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-794" name="line-794"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-795" name="line-795"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span><span class="w"></span> +<a id="line-796" name="line-796"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-797" name="line-797"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-798" name="line-798"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-799" name="line-799"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keep</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-800" name="line-800"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">];</span><span class="w"></span> +<a id="line-801" name="line-801"></a><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-802" name="line-802"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-803" name="line-803"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-804" name="line-804"></a> +<a id="line-805" name="line-805"></a><span class="w"> </span><span class="cm">/* If we found one we need to reset the path to</span> +<a id="line-806" name="line-806"></a><span class="cm"> accomodate the changes */</span><span class="w"></span> +<a id="line-807" name="line-807"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">found</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-808" name="line-808"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Clear the last one */</span><span class="w"></span> +<a id="line-809" name="line-809"></a><span class="w"> </span><span class="n">gtk_icon_theme_set_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="p">)</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="p">);</span><span class="w"></span> +<a id="line-810" name="line-810"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-811" name="line-811"></a> +<a id="line-812" name="line-812"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-813" name="line-813"></a><span class="nl">exit</span><span class="p">:</span><span class="w"></span> +<a id="line-814" name="line-814"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-815" name="line-815"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-816" name="line-816"></a><span class="p">}</span><span class="w"></span> +<a id="line-817" name="line-817"></a> +<a id="line-818" name="line-818"></a><span class="kt">void</span><span class="w"> </span><span class="nf">get_emblem_paths_cb</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"></span> +<a id="line-819" name="line-819"></a><span class="p">{</span><span class="w"></span> +<a id="line-820" name="line-820"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-821" name="line-821"></a><span class="w"> </span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-822" name="line-822"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">);</span><span class="w"></span> +<a id="line-823" name="line-823"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">,</span><span class="w"> </span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">);</span><span class="w"></span> +<a id="line-824" name="line-824"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-825" name="line-825"></a><span class="w"> </span><span class="cm">/* Increase the ref so that finish_general_command doesn't delete it. */</span><span class="w"></span> +<a id="line-826" name="line-826"></a><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-827" name="line-827"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-828" name="line-828"></a> +<a id="line-829" name="line-829"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-830" name="line-830"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-831" name="line-831"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span><span class="w"></span> +<a id="line-832" name="line-832"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-833" name="line-833"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-834" name="line-834"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">;</span><span class="w"></span> +<a id="line-835" name="line-835"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-836" name="line-836"></a> +<a id="line-837" name="line-837"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">add_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">));</span><span class="w"></span> +<a id="line-838" name="line-838"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_all_files</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-839" name="line-839"></a><span class="p">}</span><span class="w"></span> +<a id="line-840" name="line-840"></a> +<a id="line-841" name="line-841"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-842" name="line-842"></a><span class="nf">on_connect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-843" name="line-843"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-844" name="line-844"></a> +<a id="line-845" name="line-845"></a><span class="w"> </span><span class="n">dropbox_command_client_send_command</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"></span> +<a id="line-846" name="line-846"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)</span><span class="w"> </span><span class="n">get_emblem_paths_cb</span><span class="p">,</span><span class="w"></span> +<a id="line-847" name="line-847"></a><span class="hll"><span class="w"> </span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="s">"get_emblem_paths"</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. <span class="marker">[+]</span></span><div class="content">Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. +The C99 standard, in section 7.15.1.1, states that if the type used by va_arg() is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined. +The value of the NULL macro is an implementation-defined null pointer constant (7.17), which can be any integer constant expression with the value 0, or such an expression casted to (void*) (6.3.2.3). This includes values like 0, 0L, or even 0LL. +In practice on common architectures, this will cause real crashes if sizeof(int) != sizeof(void*), and NULL is defined to 0 or any other null pointer constant that promotes to int. +To reproduce you might be able to use this little code example on 64bit platforms. If the output includes "ERROR", the sentinel had only 4 out of 8 bytes initialized to zero and was not detected as the final argument to stop argument processing via va_arg(). Changing the 0 to (void*)0 or 0L will make the "ERROR" output go away. +#include <stdarg.h> +#include <stdio.h> + +void f(char *s, ...) { + va_list ap; + va_start(ap,s); + for (;;) { + char *p = va_arg(ap,char*); + printf("%018p, %s\n", p, (long)p & 255 ? p : ""); + if(!p) break; + } + va_end(ap); +} + +void g() { + char *s2 = "x"; + char *s3 = "ERROR"; + + // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64 + f("first", s2, s2, s2, s2, s2, 0, s3, (char*)0); +} + +void h() { + int i; + volatile unsigned char a[1000]; + for (i = 0; i<sizeof(a); i++) + a[i] = -1; +} + +int main() { + h(); + g(); + return 0; +}</div></div> +</span><a id="line-848" name="line-848"></a><span class="p">}</span><span class="w"></span> +<a id="line-849" name="line-849"></a> +<a id="line-850" name="line-850"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-851" name="line-851"></a><span class="nf">on_disconnect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-852" name="line-852"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-853" name="line-853"></a> +<a id="line-854" name="line-854"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-855" name="line-855"></a><span class="w"> </span><span class="cm">/* This call will free the data too. */</span><span class="w"></span> +<a id="line-856" name="line-856"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span><span class="w"></span> +<a id="line-857" name="line-857"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-858" name="line-858"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-859" name="line-859"></a><span class="p">}</span><span class="w"></span> +<a id="line-860" name="line-860"></a> +<a id="line-861" name="line-861"></a> +<a id="line-862" name="line-862"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-863" name="line-863"></a><span class="nf">caja_dropbox_menu_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaMenuProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-864" name="line-864"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">get_file_items</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_get_file_items</span><span class="p">;</span><span class="w"></span> +<a id="line-865" name="line-865"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-866" name="line-866"></a><span class="p">}</span><span class="w"></span> +<a id="line-867" name="line-867"></a> +<a id="line-868" name="line-868"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-869" name="line-869"></a><span class="nf">caja_dropbox_info_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaInfoProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-870" name="line-870"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">update_file_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_update_file_info</span><span class="p">;</span><span class="w"></span> +<a id="line-871" name="line-871"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">cancel_update</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_cancel_update</span><span class="p">;</span><span class="w"></span> +<a id="line-872" name="line-872"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-873" name="line-873"></a><span class="p">}</span><span class="w"></span> +<a id="line-874" name="line-874"></a> +<a id="line-875" name="line-875"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-876" name="line-876"></a><span class="nf">caja_dropbox_instance_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-877" name="line-877"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-878" name="line-878"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-879" name="line-879"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-880" name="line-880"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-881" name="line-881"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-882" name="line-882"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-883" name="line-883"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-884" name="line-884"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span><span class="w"></span> +<a id="line-885" name="line-885"></a><span class="w"> </span><span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-886" name="line-886"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-887" name="line-887"></a> +<a id="line-888" name="line-888"></a><span class="w"> </span><span class="cm">/* setup the connection obj*/</span><span class="w"></span> +<a id="line-889" name="line-889"></a><span class="w"> </span><span class="n">dropbox_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span><span class="w"></span> +<a id="line-890" name="line-890"></a> +<a id="line-891" name="line-891"></a><span class="w"> </span><span class="cm">/* our hooks */</span><span class="w"></span> +<a id="line-892" name="line-892"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span><span class="w"> </span><span class="s">"shell_touch"</span><span class="p">,</span><span class="w"></span> +<a id="line-893" name="line-893"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxUpdateHook</span><span class="p">)</span><span class="w"> </span><span class="n">handle_shell_touch</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-894" name="line-894"></a> +<a id="line-895" name="line-895"></a><span class="w"> </span><span class="cm">/* add connection handlers */</span><span class="w"></span> +<a id="line-896" name="line-896"></a><span class="w"> </span><span class="n">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span><span class="w"></span> +<a id="line-897" name="line-897"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_connect</span><span class="p">,</span><span class="w"></span> +<a id="line-898" name="line-898"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-899" name="line-899"></a><span class="w"> </span><span class="n">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span><span class="w"></span> +<a id="line-900" name="line-900"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_disconnect</span><span class="p">,</span><span class="w"></span> +<a id="line-901" name="line-901"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-902" name="line-902"></a> +<a id="line-903" name="line-903"></a><span class="w"> </span><span class="cm">/* now start the connection */</span><span class="w"></span> +<a id="line-904" name="line-904"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"about to start client connection"</span><span class="p">);</span><span class="w"></span> +<a id="line-905" name="line-905"></a><span class="w"> </span><span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span><span class="w"></span> +<a id="line-906" name="line-906"></a> +<a id="line-907" name="line-907"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-908" name="line-908"></a><span class="p">}</span><span class="w"></span> +<a id="line-909" name="line-909"></a> +<a id="line-910" name="line-910"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-911" name="line-911"></a><span class="nf">caja_dropbox_class_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-912" name="line-912"></a><span class="p">}</span><span class="w"></span> +<a id="line-913" name="line-913"></a> +<a id="line-914" name="line-914"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-915" name="line-915"></a><span class="nf">caja_dropbox_class_finalize</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-916" name="line-916"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"just checking"</span><span class="p">);</span><span class="w"></span> +<a id="line-917" name="line-917"></a><span class="w"> </span><span class="cm">/* kill threads here? */</span><span class="w"></span> +<a id="line-918" name="line-918"></a><span class="p">}</span><span class="w"></span> +<a id="line-919" name="line-919"></a> +<a id="line-920" name="line-920"></a><span class="n">GType</span><span class="w"></span> +<a id="line-921" name="line-921"></a><span class="nf">caja_dropbox_get_type</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-922" name="line-922"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_type</span><span class="p">;</span><span class="w"></span> +<a id="line-923" name="line-923"></a><span class="p">}</span><span class="w"></span> +<a id="line-924" name="line-924"></a> +<a id="line-925" name="line-925"></a><span class="kt">void</span><span class="w"></span> +<a id="line-926" name="line-926"></a><span class="nf">caja_dropbox_register_type</span><span class="w"> </span><span class="p">(</span><span class="n">GTypeModule</span><span class="w"> </span><span class="o">*</span><span class="n">module</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-927" name="line-927"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GTypeInfo</span><span class="w"> </span><span class="n">info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-928" name="line-928"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="p">),</span><span class="w"></span> +<a id="line-929" name="line-929"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseInitFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-930" name="line-930"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-931" name="line-931"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_init</span><span class="p">,</span><span class="w"></span> +<a id="line-932" name="line-932"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_finalize</span><span class="p">,</span><span class="w"></span> +<a id="line-933" name="line-933"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-934" name="line-934"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="p">),</span><span class="w"></span> +<a id="line-935" name="line-935"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"></span> +<a id="line-936" name="line-936"></a><span class="w"> </span><span class="p">(</span><span class="n">GInstanceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_instance_init</span><span class="p">,</span><span class="w"></span> +<a id="line-937" name="line-937"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-938" name="line-938"></a> +<a id="line-939" name="line-939"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">menu_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-940" name="line-940"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_menu_provider_iface_init</span><span class="p">,</span><span class="w"></span> +<a id="line-941" name="line-941"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-942" name="line-942"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-943" name="line-943"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-944" name="line-944"></a> +<a id="line-945" name="line-945"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">info_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-946" name="line-946"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_info_provider_iface_init</span><span class="p">,</span><span class="w"></span> +<a id="line-947" name="line-947"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-948" name="line-948"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-949" name="line-949"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-950" name="line-950"></a> +<a id="line-951" name="line-951"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"></span> +<a id="line-952" name="line-952"></a><span class="w"> </span><span class="n">g_type_module_register_type</span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-953" name="line-953"></a><span class="w"> </span><span class="n">G_TYPE_OBJECT</span><span class="p">,</span><span class="w"></span> +<a id="line-954" name="line-954"></a><span class="w"> </span><span class="s">"CajaDropbox"</span><span class="p">,</span><span class="w"></span> +<a id="line-955" name="line-955"></a><span class="w"> </span><span class="o">&</span><span class="n">info</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span> +<a id="line-956" name="line-956"></a> +<a id="line-957" name="line-957"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-958" name="line-958"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span><span class="w"></span> +<a id="line-959" name="line-959"></a><span class="w"> </span><span class="n">CAJA_TYPE_MENU_PROVIDER</span><span class="p">,</span><span class="w"></span> +<a id="line-960" name="line-960"></a><span class="w"> </span><span class="o">&</span><span class="n">menu_provider_iface_info</span><span class="p">);</span><span class="w"></span> +<a id="line-961" name="line-961"></a> +<a id="line-962" name="line-962"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-963" name="line-963"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span><span class="w"></span> +<a id="line-964" name="line-964"></a><span class="w"> </span><span class="n">CAJA_TYPE_INFO_PROVIDER</span><span class="p">,</span><span class="w"></span> +<a id="line-965" name="line-965"></a><span class="w"> </span><span class="o">&</span><span class="n">info_provider_iface_info</span><span class="p">);</span><span class="w"></span> +<a id="line-966" name="line-966"></a><span class="p">}</span><span class="w"></span> +</pre></div> +</td></tr></table> + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/index.html b/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/index.html new file mode 100644 index 0000000..2c87aae --- /dev/null +++ b/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/index.html @@ -0,0 +1,202 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox</h1> + <div id="filters"> + + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="error"disabled/>error</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="warning"disabled/>warning</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="portability"checked/>portability</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="performance"disabled/>performance</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="style"checked/>style</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="information"checked/>information</label> + | + <label class="checkBtn"><input type="checkbox" onclick="toggleTool(this)" id="cppcheck"checked/>cppcheck</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleTool(this)" id="clang-tidy"disabled/>clang-tidy</label> + | + <label class="severityHeader">File: <input type="text" oninput="filterFile(this.value)"/></label> + <label class="severityHeader">Filter: <input type="text" oninput="filterText(this.value)"/></label> + </div> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Defect summary</a> </p> + + <label><input type="checkbox" class="idToggle" onclick="toggleAll()" checked> Toggle all</label> + <table> + <tr><th>Show</th><th>#</th><th>Defect ID</th></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="variableScope" name="variableScope" checked></td><td>2</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>1</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="missingIncludeSystem" name="missingIncludeSystem" checked></td><td>1</td><td>missingIncludeSystem</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="varFuncNullUB" name="varFuncNullUB" checked></td><td>1</td><td>varFuncNullUB</td></tr> + <tr><td></td><td>5</td><td>total</td></tr> + </table> + <p><a href="stats.html">Statistics</a></p> + </div> + <div id="content_index"> + + <table class="summaryTable"> + <tr><th>Line</th><th>Id</th><th>CWE</th><th>Severity</th><th>Message</th></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="1.html"></a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Cppcheck cannot find all the include files (use --check-config for details)</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="0.html">src/caja-dropbox.c</a></td></tr> + <tr class="variableScope sev_style issue"><td><a href="0.html#line-312">312</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 'file' can be reduced.</td></tr> + <tr class="variableScope sev_style issue"><td><a href="0.html#line-752">752</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 'i' can be reduced.</td></tr> + <tr class="knownConditionTrueFalse sev_style issue"><td><a href="0.html#line-756">756</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td>Condition 'emblem_paths_response' is always true</td></tr> + <tr class="varFuncNullUB sev_portability issue"><td><a href="0.html#line-847">847</a></td><td>varFuncNullUB</td><td><a href="https://cwe.mitre.org/data/definitions/475.html">475</a></td><td>portability</td><td>Passing NULL after the last typed argument to a variadic function leads to undefined behaviour.</td></tr> + </tbody> + </table> + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/stats.html b/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/stats.html new file mode 100644 index 0000000..6f8dab3 --- /dev/null +++ b/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/stats.html @@ -0,0 +1,170 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: Statistics</h1> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Back to summary</a> </p> + + </div> + <div id="content_index"> +<p><span class="statHeader">Top 10 files for portability severity, total findings: 1</span><br> +   1 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> +<p><span class="statHeader">Top 10 files for style severity, total findings: 3</span><br> +   3 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.7.4 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/style.css b/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/style.css new file mode 100644 index 0000000..3897bfa --- /dev/null +++ b/2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/style.css @@ -0,0 +1,177 @@ + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; + font-size: 13px; + line-height: 1.5; + height: 100%; + margin: 0; +} + +#wrapper { + position: fixed; + height: 100vh; + width: 100vw; + display: grid; + grid-template-rows: fit-content(8rem) auto fit-content(8rem); + grid-template-columns: fit-content(25%) 1fr; + grid-template-areas: + "header header" + "menu content" + "footer footer"; +} + +h1 { + margin: 0 0 8px -2px; + font-size: 175%; +} + +.header { + padding: 0 0 5px 15px; + grid-area: header; + border-bottom: thin solid #aaa; +} + +.footer { + grid-area: footer; + border-top: thin solid #aaa; + font-size: 85%; + +} + +.footer > p { + margin: 4px; +} + +#menu, +#menu_index { + grid-area: menu; + text-align: left; + overflow: auto; + padding: 0 23px 15px 15px; + border-right: thin solid #aaa; + min-width: 200px; +} + +#menu > a { + display: block; + margin-left: 10px; + font-size: 12px; +} + +#content, +#content_index { + grid-area: content; + padding: 0px 5px 15px 15px; + overflow: auto; +} + +label { + white-space: nowrap; +} + +label.checkBtn.disabled { + color: #606060; + background: #e0e0e0; + font-style: italic; +} + +label.checkBtn, input[type="text"] { + border: 1px solid grey; + border-radius: 4px; + box-shadow: 1px 1px inset; + padding: 1px 5px; +} + +label.checkBtn { + white-space: nowrap; + background: #ccddff; +} + +label.unchecked { + background: #eff8ff; + box-shadow: 1px 1px 1px; +} + +label.checkBtn:hover, label.unchecked:hover{ + box-shadow: 0 0 2px; +} + +label.disabled:hover { + box-shadow: 1px 1px inset; +} + +label.checkBtn > input { + display:none; +} + +.summaryTable { + width: 100%; +} + +table.summaryTable td { padding: 0 5px 0 5px; } + +.statHeader, .severityHeader { + font-weight: bold; +} + +.warning { + background-color: #ffffa7; +} + +.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; + position: relative; + margin: -10px; +} + +.linenos { + border-right: thin solid #aaa; + color: #d3d3d3; + padding-right: 6px; +} + +.id-filtered, .severity-filtered, .file-filtered, .tool-filtered, .text-filtered { + visibility: collapse; +} diff --git a/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/index.html b/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/index.html new file mode 100644 index 0000000..0258968 --- /dev/null +++ b/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/index.html @@ -0,0 +1,94 @@ +<html> +<head> +<title>rootdir - scan-build results</title> +<link type="text/css" rel="stylesheet" href="scanview.css"/> +<script src="sorttable.js"></script> +<script language='javascript' type="text/javascript"> +function SetDisplay(RowClass, DisplayVal) +{ + var Rows = document.getElementsByTagName("tr"); + for ( var i = 0 ; i < Rows.length; ++i ) { + if (Rows[i].className == RowClass) { + Rows[i].style.display = DisplayVal; + } + } +} + +function CopyCheckedStateToCheckButtons(SummaryCheckButton) { + var Inputs = document.getElementsByTagName("input"); + for ( var i = 0 ; i < Inputs.length; ++i ) { + if (Inputs[i].type == "checkbox") { + if(Inputs[i] != SummaryCheckButton) { + Inputs[i].checked = SummaryCheckButton.checked; + Inputs[i].onclick(); + } + } + } +} + +function returnObjById( id ) { + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +var NumUnchecked = 0; + +function ToggleDisplay(CheckButton, ClassName) { + if (CheckButton.checked) { + SetDisplay(ClassName, ""); + if (--NumUnchecked == 0) { + returnObjById("AllBugsCheck").checked = true; + } + } + else { + SetDisplay(ClassName, "none"); + NumUnchecked++; + returnObjById("AllBugsCheck").checked = false; + } +} +</script> +<!-- SUMMARYENDHEAD --> +</head> +<body> +<h1>rootdir - scan-build results</h1> + +<table> +<tr><th>User:</th><td>root@6d47ab0c0f2d</td></tr> +<tr><th>Working Directory:</th><td>/rootdir</td></tr> +<tr><th>Command Line:</th><td>make -j 2</td></tr> +<tr><th>Clang Version:</th><td>clang version 15.0.7 (Fedora 15.0.7-2.fc37) +</td></tr> +<tr><th>Date:</th><td>Sun Apr 16 22:01:19 2023</td></tr> +</table> +<h2>Bug Summary</h2><table> +<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead> +<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">1</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr> +<tr><th>Logic error</th><th colspan=2></th></tr> +<tr><td class="SUMM_DESC">Cast from non-struct type to struct type</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_cast_from_non-struct_type_to_struct_type');" checked/></center></td></tr> +</table> +<h2>Reports</h2> + +<table class="sortable" style="table-layout:automatic"> +<thead><tr> + <td>Bug Group</td> + <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind"> ▾</span></td> + <td>File</td> + <td>Function/Method</td> + <td class="Q">Line</td> + <td class="Q">Path Length</td> + <td class="sorttable_nosort"></td> + <!-- REPORTBUGCOL --> +</tr></thead> +<tbody> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-1b9128.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-1b9128.html" --> +</tr> +</tbody> +</table> + +</body></html> diff --git a/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/report-1b9128.html b/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/report-1b9128.html new file mode 100644 index 0000000..a8f1c14 --- /dev/null +++ b/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/report-1b9128.html @@ -0,0 +1,1553 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { position:relative } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.msg.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/lib64/clang/15.0.7 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/fribidi -I /usr/include/libxml2 -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/gio-unix-2.0 -I /usr/include/cloudproviders -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/at-spi-2.0 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-4 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -D PIC -internal-isystem /usr/lib64/clang/15.0.7/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2023-04-16-220119-5762-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // SHIFT + S + if (event.shiftKey && event.keyCode == 83) { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].click(); + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> + <input type="checkbox" name="showArrows" + id="showArrows" style="margin-left: 10px" /> + <label for="showArrows"> + Show control flow arrows + </label> +</form> + +<script type='text/javascript'> +// Return range of numbers from a range [lower, upper). +function range(lower, upper) { + var array = []; + for (var i = lower; i <= upper; ++i) { + array.push(i); + } + return array; +} + +var getRelatedArrowIndices = function(pathId) { + // HTML numeration of events is a bit different than it is in the path. + // Everything is rotated one step to the right, so the last element + // (error diagnostic) has index 0. + if (pathId == 0) { + // arrowIndices has at least 2 elements + pathId = arrowIndices.length - 1; + } + + return range(arrowIndices[pathId], arrowIndices[pathId - 1]); +} + +var highlightArrowsForSelectedEvent = function() { + const selectedNum = findNum(); + const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum); + arrowIndicesToHighlight.forEach((index) => { + var arrow = document.querySelector("#arrow" + index); + if(arrow) { + classListAdd(arrow, "selected") + } + }); +} + +var getAbsoluteBoundingRect = function(element) { + const relative = element.getBoundingClientRect(); + return { + left: relative.left + window.pageXOffset, + right: relative.right + window.pageXOffset, + top: relative.top + window.pageYOffset, + bottom: relative.bottom + window.pageYOffset, + height: relative.height, + width: relative.width + }; +} + +var drawArrow = function(index) { + // This function is based on the great answer from SO: + // https://stackoverflow.com/a/39575674/11582326 + var start = document.querySelector("#start" + index); + var end = document.querySelector("#end" + index); + var arrow = document.querySelector("#arrow" + index); + + var startRect = getAbsoluteBoundingRect(start); + var endRect = getAbsoluteBoundingRect(end); + + // It is an arrow from a token to itself, no need to visualize it. + if (startRect.top == endRect.top && + startRect.left == endRect.left) + return; + + // Each arrow is a very simple Bézier curve, with two nodes and + // two handles. So, we need to calculate four points in the window: + // * start node + var posStart = { x: 0, y: 0 }; + // * end node + var posEnd = { x: 0, y: 0 }; + // * handle for the start node + var startHandle = { x: 0, y: 0 }; + // * handle for the end node + var endHandle = { x: 0, y: 0 }; + // One can visualize it as follows: + // + // start handle + // / + // X"""_.-""""X + // .' \ + // / start node + // | + // | + // | end node + // \ / + // `->X + // X-' + // \ + // end handle + // + // NOTE: (0, 0) is the top left corner of the window. + + // We have 3 similar, but still different scenarios to cover: + // + // 1. Two tokens on different lines. + // -xxx + // / + // \ + // -> xxx + // In this situation, we draw arrow on the left curving to the left. + // 2. Two tokens on the same line, and the destination is on the right. + // ____ + // / \ + // / V + // xxx xxx + // In this situation, we draw arrow above curving upwards. + // 3. Two tokens on the same line, and the destination is on the left. + // xxx xxx + // ^ / + // \____/ + // In this situation, we draw arrow below curving downwards. + const onDifferentLines = startRect.top <= endRect.top - 5 || + startRect.top >= endRect.top + 5; + const leftToRight = startRect.left < endRect.left; + + // NOTE: various magic constants are chosen empirically for + // better positioning and look + if (onDifferentLines) { + // Case #1 + const topToBottom = startRect.top < endRect.top; + posStart.x = startRect.left - 1; + // We don't want to start it at the top left corner of the token, + // it doesn't feel like this is where the arrow comes from. + // For this reason, we start it in the middle of the left side + // of the token. + posStart.y = startRect.top + startRect.height / 2; + + // End node has arrow head and we give it a bit more space. + posEnd.x = endRect.left - 4; + posEnd.y = endRect.top; + + // Utility object with x and y offsets for handles. + var curvature = { + // We want bottom-to-top arrow to curve a bit more, so it doesn't + // overlap much with top-to-bottom curves (much more frequent). + x: topToBottom ? 15 : 25, + y: Math.min((posEnd.y - posStart.y) / 3, 10) + } + + // When destination is on the different line, we can make a + // curvier arrow because we have space for it. + // So, instead of using + // + // startHandle.x = posStart.x - curvature.x + // endHandle.x = posEnd.x - curvature.x + // + // We use the leftmost of these two values for both handles. + startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x; + endHandle.x = startHandle.x; + + // Curving downwards from the start node... + startHandle.y = posStart.y + curvature.y; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else if (leftToRight) { + // Case #2 + // Starting from the top right corner... + posStart.x = startRect.right - 1; + posStart.y = startRect.top; + + // ...and ending at the top left corner of the end token. + posEnd.x = endRect.left + 1; + posEnd.y = endRect.top - 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posEnd.x - posStart.x) / 3, 15), + y: 5 + } + + // Curving to the right... + startHandle.x = posStart.x + curvature.x; + // ... and upwards from the start node. + startHandle.y = posStart.y - curvature.y; + + // And to the left... + endHandle.x = posEnd.x - curvature.x; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else { + // Case #3 + // Starting from the bottom right corner... + posStart.x = startRect.right; + posStart.y = startRect.bottom; + + // ...and ending also at the bottom right corner, but of the end token. + posEnd.x = endRect.right - 1; + posEnd.y = endRect.bottom + 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posStart.x - posEnd.x) / 3, 15), + y: 5 + } + + // Curving to the left... + startHandle.x = posStart.x - curvature.x; + // ... and downwards from the start node. + startHandle.y = posStart.y + curvature.y; + + // And to the right... + endHandle.x = posEnd.x + curvature.x; + // ... and downwards from the end node. + endHandle.y = posEnd.y + curvature.y; + } + + // Put it all together into a path. + // More information on the format: + // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths + var pathStr = "M" + posStart.x + "," + posStart.y + " " + + "C" + startHandle.x + "," + startHandle.y + " " + + endHandle.x + "," + endHandle.y + " " + + posEnd.x + "," + posEnd.y; + + arrow.setAttribute("d", pathStr); +}; + +var drawArrows = function() { + const numOfArrows = document.querySelectorAll("path[id^=arrow]").length; + for (var i = 0; i < numOfArrows; ++i) { + drawArrow(i); + } +} + +var toggleArrows = function(event) { + const arrows = document.querySelector("#arrows"); + if (event.target.checked) { + arrows.setAttribute("visibility", "visible"); + } else { + arrows.setAttribute("visibility", "hidden"); + } +} + +window.addEventListener("resize", drawArrows); +document.addEventListener("DOMContentLoaded", function() { + // Whenever we show invocation, locations change, i.e. we + // need to redraw arrows. + document + .querySelector('input[id="showinvocation"]') + .addEventListener("click", drawArrows); + // Hiding irrelevant lines also should cause arrow rerender. + document + .querySelector('input[name="showCounterexample"]') + .addEventListener("change", drawArrows); + document + .querySelector('input[name="showArrows"]') + .addEventListener("change", toggleArrows); + drawArrows(); + // Default highlighting for the last event. + highlightArrowsForSelectedEvent(); +}); +</script> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".msg.selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var classListAdd = function(el, theClass) { + if(!el.className.baseVal) + el.className += " " + theClass; + else + el.className.baseVal += " " + theClass; +}; + +var classListRemove = function(el, theClass) { + var className = (!el.className.baseVal) ? + el.className : el.className.baseVal; + className = className.replace(" " + theClass, ""); + if(!el.className.baseVal) + el.className = className; + else + el.className.baseVal = className; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + classListRemove(s, "selected"); + }); + classListAdd(el, "selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); + highlightArrowsForSelectedEvent(); +}; + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // key 'j' + if (event.keyCode == 74) { + navigateTo(/*up=*/false); + // key 'k' + } else if (event.keyCode == 75) { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> + +<style type="text/css"> + svg { + position:absolute; + top:0; + left:0; + height:100%; + width:100%; + pointer-events: none; + overflow: visible + } + .arrow { + stroke-opacity: 0.2; + stroke-width: 1; + marker-end: url(#arrowhead); + } + + .arrow.selected { + stroke-opacity: 0.6; + stroke-width: 2; + marker-end: url(#arrowheadSelected); + } + + .arrowhead { + orient: auto; + stroke: none; + opacity: 0.6; + fill: blue; + } +</style> +<svg xmlns="http://www.w3.org/2000/svg"> + <defs> + <marker id="arrowheadSelected" class="arrowhead" opacity="0.6" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + <marker id="arrowhead" class="arrowhead" opacity="0.2" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + </defs> + <g id="arrows" fill="none" stroke="blue" visibility="hidden"> + + </g> +</svg> +<script type='text/javascript'> +const arrowIndices = [ 0,0 ] +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = g_strdup(filename);</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, g_strdup(<span class='string_literal'>"path"</span>), paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = g_strdup(command);</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> g_strdup(na), is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = g_strdup(<span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/scanview.css b/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/scanview.css new file mode 100644 index 0000000..cf8a5a6 --- /dev/null +++ b/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/scanview.css @@ -0,0 +1,62 @@ +body { color:#000000; background-color:#ffffff } +body { font-family: Helvetica, sans-serif; font-size:9pt } +h1 { font-size: 14pt; } +h2 { font-size: 12pt; } +table { font-size:9pt } +table { border-spacing: 0px; border: 1px solid black } +th, table thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + font-weight: bold; font-family: Verdana; + white-space:nowrap; +} +.W { font-size:0px } +th, td { padding:5px; padding-left:8px; text-align:left } +td.SUMM_DESC { padding-left:12px } +td.DESC { white-space:pre } +td.Q { text-align:right } +td { text-align:left } +tbody.scrollContent { overflow:auto } + +table.form_group { + background-color: #ccc; + border: 1px solid #333; + padding: 2px; +} + +table.form_inner_group { + background-color: #ccc; + border: 1px solid #333; + padding: 0px; +} + +table.form { + background-color: #999; + border: 1px solid #333; + padding: 2px; +} + +td.form_label { + text-align: right; + vertical-align: top; +} +/* For one line entires */ +td.form_clabel { + text-align: right; + vertical-align: center; +} +td.form_value { + text-align: left; + vertical-align: top; +} +td.form_submit { + text-align: right; + vertical-align: top; +} + +h1.SubmitFail { + color: #f00; +} +h1.SubmitOk { +} diff --git a/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/sorttable.js b/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/sorttable.js new file mode 100644 index 0000000..32faa07 --- /dev/null +++ b/2023-04-16-220119-5762-1@a4dac3d0ebf8_master/sorttable.js @@ -0,0 +1,492 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backward compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + //row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[�$�]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; diff --git a/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/0.html b/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/0.html new file mode 100644 index 0000000..cfbb934 --- /dev/null +++ b/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/0.html @@ -0,0 +1,2233 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/caja-dropbox.c</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> caja-dropbox.c</p> +<a href="0.html#line-312"> variableScope 312</a><a href="0.html#line-752"> variableScope 752</a><a href="0.html#line-756"> knownConditionTrueFalse 756</a><a href="0.html#line-847"> varFuncNullUB 847</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span> +<span class="normal">114</span> +<span class="normal">115</span> +<span class="normal">116</span> +<span class="normal">117</span> +<span class="normal">118</span> +<span class="normal">119</span> +<span class="normal">120</span> +<span class="normal">121</span> +<span class="normal">122</span> +<span class="normal">123</span> +<span class="normal">124</span> +<span class="normal">125</span> +<span class="normal">126</span> +<span class="normal">127</span> +<span class="normal">128</span> +<span class="normal">129</span> +<span class="normal">130</span> +<span class="normal">131</span> +<span class="normal">132</span> +<span class="normal">133</span> +<span class="normal">134</span> +<span class="normal">135</span> +<span class="normal">136</span> +<span class="normal">137</span> +<span class="normal">138</span> +<span class="normal">139</span> +<span class="normal">140</span> +<span class="normal">141</span> +<span class="normal">142</span> +<span class="normal">143</span> +<span class="normal">144</span> +<span class="normal">145</span> +<span class="normal">146</span> +<span class="normal">147</span> +<span class="normal">148</span> +<span class="normal">149</span> +<span class="normal">150</span> +<span class="normal">151</span> +<span class="normal">152</span> +<span class="normal">153</span> +<span class="normal">154</span> +<span class="normal">155</span> +<span class="normal">156</span> +<span class="normal">157</span> +<span class="normal">158</span> +<span class="normal">159</span> +<span class="normal">160</span> +<span class="normal">161</span> +<span class="normal">162</span> +<span class="normal">163</span> +<span class="normal">164</span> +<span class="normal">165</span> +<span class="normal">166</span> +<span class="normal">167</span> +<span class="normal">168</span> +<span class="normal">169</span> +<span class="normal">170</span> +<span class="normal">171</span> +<span class="normal">172</span> +<span class="normal">173</span> +<span class="normal">174</span> +<span class="normal">175</span> +<span class="normal">176</span> +<span class="normal">177</span> +<span class="normal">178</span> +<span class="normal">179</span> +<span class="normal">180</span> +<span class="normal">181</span> +<span class="normal">182</span> +<span class="normal">183</span> +<span class="normal">184</span> +<span class="normal">185</span> +<span class="normal">186</span> +<span class="normal">187</span> +<span class="normal">188</span> +<span class="normal">189</span> +<span class="normal">190</span> +<span class="normal">191</span> +<span class="normal">192</span> +<span class="normal">193</span> +<span class="normal">194</span> +<span class="normal">195</span> +<span class="normal">196</span> +<span class="normal">197</span> +<span class="normal">198</span> +<span class="normal">199</span> +<span class="normal">200</span> +<span class="normal">201</span> +<span class="normal">202</span> +<span class="normal">203</span> +<span class="normal">204</span> +<span class="normal">205</span> +<span class="normal">206</span> +<span class="normal">207</span> +<span class="normal">208</span> +<span class="normal">209</span> +<span class="normal">210</span> +<span class="normal">211</span> +<span class="normal">212</span> +<span class="normal">213</span> +<span class="normal">214</span> +<span class="normal">215</span> +<span class="normal">216</span> +<span class="normal">217</span> +<span class="normal">218</span> +<span class="normal">219</span> +<span class="normal">220</span> +<span class="normal">221</span> +<span class="normal">222</span> +<span class="normal">223</span> +<span class="normal">224</span> +<span class="normal">225</span> +<span class="normal">226</span> +<span class="normal">227</span> +<span class="normal">228</span> +<span class="normal">229</span> +<span class="normal">230</span> +<span class="normal">231</span> +<span class="normal">232</span> +<span class="normal">233</span> +<span class="normal">234</span> +<span class="normal">235</span> +<span class="normal">236</span> +<span class="normal">237</span> +<span class="normal">238</span> +<span class="normal">239</span> +<span class="normal">240</span> +<span class="normal">241</span> +<span class="normal">242</span> +<span class="normal">243</span> +<span class="normal">244</span> +<span class="normal">245</span> +<span class="normal">246</span> +<span class="normal">247</span> +<span class="normal">248</span> +<span class="normal">249</span> +<span class="normal">250</span> +<span class="normal">251</span> +<span class="normal">252</span> +<span class="normal">253</span> +<span class="normal">254</span> +<span class="normal">255</span> +<span class="normal">256</span> +<span class="normal">257</span> +<span class="normal">258</span> +<span class="normal">259</span> +<span class="normal">260</span> +<span class="normal">261</span> +<span class="normal">262</span> +<span class="normal">263</span> +<span class="normal">264</span> +<span class="normal">265</span> +<span class="normal">266</span> +<span class="normal">267</span> +<span class="normal">268</span> +<span class="normal">269</span> +<span class="normal">270</span> +<span class="normal">271</span> +<span class="normal">272</span> +<span class="normal">273</span> +<span class="normal">274</span> +<span class="normal">275</span> +<span class="normal">276</span> +<span class="normal">277</span> +<span class="normal">278</span> +<span class="normal">279</span> +<span class="normal">280</span> +<span class="normal">281</span> +<span class="normal">282</span> +<span class="normal">283</span> +<span class="normal">284</span> +<span class="normal">285</span> +<span class="normal">286</span> +<span class="normal">287</span> +<span class="normal">288</span> +<span class="normal">289</span> +<span class="normal">290</span> +<span class="normal">291</span> +<span class="normal">292</span> +<span class="normal">293</span> +<span class="normal">294</span> +<span class="normal">295</span> +<span class="normal">296</span> +<span class="normal">297</span> +<span class="normal">298</span> +<span class="normal">299</span> +<span class="normal">300</span> +<span class="normal">301</span> +<span class="normal">302</span> +<span class="normal">303</span> +<span class="normal">304</span> +<span class="normal">305</span> +<span class="normal">306</span> +<span class="normal">307</span> +<span class="normal">308</span> +<span class="normal">309</span> +<span class="normal">310</span> +<span class="normal">311</span> +<span class="normal">312</span> +<span class="normal">313</span> +<span class="normal">314</span> +<span class="normal">315</span> +<span class="normal">316</span> +<span class="normal">317</span> +<span class="normal">318</span> +<span class="normal">319</span> +<span class="normal">320</span> +<span class="normal">321</span> +<span class="normal">322</span> +<span class="normal">323</span> +<span class="normal">324</span> +<span class="normal">325</span> +<span class="normal">326</span> +<span class="normal">327</span> +<span class="normal">328</span> +<span class="normal">329</span> +<span class="normal">330</span> +<span class="normal">331</span> +<span class="normal">332</span> +<span class="normal">333</span> +<span class="normal">334</span> +<span class="normal">335</span> +<span class="normal">336</span> +<span class="normal">337</span> +<span class="normal">338</span> +<span class="normal">339</span> +<span class="normal">340</span> +<span class="normal">341</span> +<span class="normal">342</span> +<span class="normal">343</span> +<span class="normal">344</span> +<span class="normal">345</span> +<span class="normal">346</span> +<span class="normal">347</span> +<span class="normal">348</span> +<span class="normal">349</span> +<span class="normal">350</span> +<span class="normal">351</span> +<span class="normal">352</span> +<span class="normal">353</span> +<span class="normal">354</span> +<span class="normal">355</span> +<span class="normal">356</span> +<span class="normal">357</span> +<span class="normal">358</span> +<span class="normal">359</span> +<span class="normal">360</span> +<span class="normal">361</span> +<span class="normal">362</span> +<span class="normal">363</span> +<span class="normal">364</span> +<span class="normal">365</span> +<span class="normal">366</span> +<span class="normal">367</span> +<span class="normal">368</span> +<span class="normal">369</span> +<span class="normal">370</span> +<span class="normal">371</span> +<span class="normal">372</span> +<span class="normal">373</span> +<span class="normal">374</span> +<span class="normal">375</span> +<span class="normal">376</span> +<span class="normal">377</span> +<span class="normal">378</span> +<span class="normal">379</span> +<span class="normal">380</span> +<span class="normal">381</span> +<span class="normal">382</span> +<span class="normal">383</span> +<span class="normal">384</span> +<span class="normal">385</span> +<span class="normal">386</span> +<span class="normal">387</span> +<span class="normal">388</span> +<span class="normal">389</span> +<span class="normal">390</span> +<span class="normal">391</span> +<span class="normal">392</span> +<span class="normal">393</span> +<span class="normal">394</span> +<span class="normal">395</span> +<span class="normal">396</span> +<span class="normal">397</span> +<span class="normal">398</span> +<span class="normal">399</span> +<span class="normal">400</span> +<span class="normal">401</span> +<span class="normal">402</span> +<span class="normal">403</span> +<span class="normal">404</span> +<span class="normal">405</span> +<span class="normal">406</span> +<span class="normal">407</span> +<span class="normal">408</span> +<span class="normal">409</span> +<span class="normal">410</span> +<span class="normal">411</span> +<span class="normal">412</span> +<span class="normal">413</span> +<span class="normal">414</span> +<span class="normal">415</span> +<span class="normal">416</span> +<span class="normal">417</span> +<span class="normal">418</span> +<span class="normal">419</span> +<span class="normal">420</span> +<span class="normal">421</span> +<span class="normal">422</span> +<span class="normal">423</span> +<span class="normal">424</span> +<span class="normal">425</span> +<span class="normal">426</span> +<span class="normal">427</span> +<span class="normal">428</span> +<span class="normal">429</span> +<span class="normal">430</span> +<span class="normal">431</span> +<span class="normal">432</span> +<span class="normal">433</span> +<span class="normal">434</span> +<span class="normal">435</span> +<span class="normal">436</span> +<span class="normal">437</span> +<span class="normal">438</span> +<span class="normal">439</span> +<span class="normal">440</span> +<span class="normal">441</span> +<span class="normal">442</span> +<span class="normal">443</span> +<span class="normal">444</span> +<span class="normal">445</span> +<span class="normal">446</span> +<span class="normal">447</span> +<span class="normal">448</span> +<span class="normal">449</span> +<span class="normal">450</span> +<span class="normal">451</span> +<span class="normal">452</span> +<span class="normal">453</span> +<span class="normal">454</span> +<span class="normal">455</span> +<span class="normal">456</span> +<span class="normal">457</span> +<span class="normal">458</span> +<span class="normal">459</span> +<span class="normal">460</span> +<span class="normal">461</span> +<span class="normal">462</span> +<span class="normal">463</span> +<span class="normal">464</span> +<span class="normal">465</span> +<span class="normal">466</span> +<span class="normal">467</span> +<span class="normal">468</span> +<span class="normal">469</span> +<span class="normal">470</span> +<span class="normal">471</span> +<span class="normal">472</span> +<span class="normal">473</span> +<span class="normal">474</span> +<span class="normal">475</span> +<span class="normal">476</span> +<span class="normal">477</span> +<span class="normal">478</span> +<span class="normal">479</span> +<span class="normal">480</span> +<span class="normal">481</span> +<span class="normal">482</span> +<span class="normal">483</span> +<span class="normal">484</span> +<span class="normal">485</span> +<span class="normal">486</span> +<span class="normal">487</span> +<span class="normal">488</span> +<span class="normal">489</span> +<span class="normal">490</span> +<span class="normal">491</span> +<span class="normal">492</span> +<span class="normal">493</span> +<span class="normal">494</span> +<span class="normal">495</span> +<span class="normal">496</span> +<span class="normal">497</span> +<span class="normal">498</span> +<span class="normal">499</span> +<span class="normal">500</span> +<span class="normal">501</span> +<span class="normal">502</span> +<span class="normal">503</span> +<span class="normal">504</span> +<span class="normal">505</span> +<span class="normal">506</span> +<span class="normal">507</span> +<span class="normal">508</span> +<span class="normal">509</span> +<span class="normal">510</span> +<span class="normal">511</span> +<span class="normal">512</span> +<span class="normal">513</span> +<span class="normal">514</span> +<span class="normal">515</span> +<span class="normal">516</span> +<span class="normal">517</span> +<span class="normal">518</span> +<span class="normal">519</span> +<span class="normal">520</span> +<span class="normal">521</span> +<span class="normal">522</span> +<span class="normal">523</span> +<span class="normal">524</span> +<span class="normal">525</span> +<span class="normal">526</span> +<span class="normal">527</span> +<span class="normal">528</span> +<span class="normal">529</span> +<span class="normal">530</span> +<span class="normal">531</span> +<span class="normal">532</span> +<span class="normal">533</span> +<span class="normal">534</span> +<span class="normal">535</span> +<span class="normal">536</span> +<span class="normal">537</span> +<span class="normal">538</span> +<span class="normal">539</span> +<span class="normal">540</span> +<span class="normal">541</span> +<span class="normal">542</span> +<span class="normal">543</span> +<span class="normal">544</span> +<span class="normal">545</span> +<span class="normal">546</span> +<span class="normal">547</span> +<span class="normal">548</span> +<span class="normal">549</span> +<span class="normal">550</span> +<span class="normal">551</span> +<span class="normal">552</span> +<span class="normal">553</span> +<span class="normal">554</span> +<span class="normal">555</span> +<span class="normal">556</span> +<span class="normal">557</span> +<span class="normal">558</span> +<span class="normal">559</span> +<span class="normal">560</span> +<span class="normal">561</span> +<span class="normal">562</span> +<span class="normal">563</span> +<span class="normal">564</span> +<span class="normal">565</span> +<span class="normal">566</span> +<span class="normal">567</span> +<span class="normal">568</span> +<span class="normal">569</span> +<span class="normal">570</span> +<span class="normal">571</span> +<span class="normal">572</span> +<span class="normal">573</span> +<span class="normal">574</span> +<span class="normal">575</span> +<span class="normal">576</span> +<span class="normal">577</span> +<span class="normal">578</span> +<span class="normal">579</span> +<span class="normal">580</span> +<span class="normal">581</span> +<span class="normal">582</span> +<span class="normal">583</span> +<span class="normal">584</span> +<span class="normal">585</span> +<span class="normal">586</span> +<span class="normal">587</span> +<span class="normal">588</span> +<span class="normal">589</span> +<span class="normal">590</span> +<span class="normal">591</span> +<span class="normal">592</span> +<span class="normal">593</span> +<span class="normal">594</span> +<span class="normal">595</span> +<span class="normal">596</span> +<span class="normal">597</span> +<span class="normal">598</span> +<span class="normal">599</span> +<span class="normal">600</span> +<span class="normal">601</span> +<span class="normal">602</span> +<span class="normal">603</span> +<span class="normal">604</span> +<span class="normal">605</span> +<span class="normal">606</span> +<span class="normal">607</span> +<span class="normal">608</span> +<span class="normal">609</span> +<span class="normal">610</span> +<span class="normal">611</span> +<span class="normal">612</span> +<span class="normal">613</span> +<span class="normal">614</span> +<span class="normal">615</span> +<span class="normal">616</span> +<span class="normal">617</span> +<span class="normal">618</span> +<span class="normal">619</span> +<span class="normal">620</span> +<span class="normal">621</span> +<span class="normal">622</span> +<span class="normal">623</span> +<span class="normal">624</span> +<span class="normal">625</span> +<span class="normal">626</span> +<span class="normal">627</span> +<span class="normal">628</span> +<span class="normal">629</span> +<span class="normal">630</span> +<span class="normal">631</span> +<span class="normal">632</span> +<span class="normal">633</span> +<span class="normal">634</span> +<span class="normal">635</span> +<span class="normal">636</span> +<span class="normal">637</span> +<span class="normal">638</span> +<span class="normal">639</span> +<span class="normal">640</span> +<span class="normal">641</span> +<span class="normal">642</span> +<span class="normal">643</span> +<span class="normal">644</span> +<span class="normal">645</span> +<span class="normal">646</span> +<span class="normal">647</span> +<span class="normal">648</span> +<span class="normal">649</span> +<span class="normal">650</span> +<span class="normal">651</span> +<span class="normal">652</span> +<span class="normal">653</span> +<span class="normal">654</span> +<span class="normal">655</span> +<span class="normal">656</span> +<span class="normal">657</span> +<span class="normal">658</span> +<span class="normal">659</span> +<span class="normal">660</span> +<span class="normal">661</span> +<span class="normal">662</span> +<span class="normal">663</span> +<span class="normal">664</span> +<span class="normal">665</span> +<span class="normal">666</span> +<span class="normal">667</span> +<span class="normal">668</span> +<span class="normal">669</span> +<span class="normal">670</span> +<span class="normal">671</span> +<span class="normal">672</span> +<span class="normal">673</span> +<span class="normal">674</span> +<span class="normal">675</span> +<span class="normal">676</span> +<span class="normal">677</span> +<span class="normal">678</span> +<span class="normal">679</span> +<span class="normal">680</span> +<span class="normal">681</span> +<span class="normal">682</span> +<span class="normal">683</span> +<span class="normal">684</span> +<span class="normal">685</span> +<span class="normal">686</span> +<span class="normal">687</span> +<span class="normal">688</span> +<span class="normal">689</span> +<span class="normal">690</span> +<span class="normal">691</span> +<span class="normal">692</span> +<span class="normal">693</span> +<span class="normal">694</span> +<span class="normal">695</span> +<span class="normal">696</span> +<span class="normal">697</span> +<span class="normal">698</span> +<span class="normal">699</span> +<span class="normal">700</span> +<span class="normal">701</span> +<span class="normal">702</span> +<span class="normal">703</span> +<span class="normal">704</span> +<span class="normal">705</span> +<span class="normal">706</span> +<span class="normal">707</span> +<span class="normal">708</span> +<span class="normal">709</span> +<span class="normal">710</span> +<span class="normal">711</span> +<span class="normal">712</span> +<span class="normal">713</span> +<span class="normal">714</span> +<span class="normal">715</span> +<span class="normal">716</span> +<span class="normal">717</span> +<span class="normal">718</span> +<span class="normal">719</span> +<span class="normal">720</span> +<span class="normal">721</span> +<span class="normal">722</span> +<span class="normal">723</span> +<span class="normal">724</span> +<span class="normal">725</span> +<span class="normal">726</span> +<span class="normal">727</span> +<span class="normal">728</span> +<span class="normal">729</span> +<span class="normal">730</span> +<span class="normal">731</span> +<span class="normal">732</span> +<span class="normal">733</span> +<span class="normal">734</span> +<span class="normal">735</span> +<span class="normal">736</span> +<span class="normal">737</span> +<span class="normal">738</span> +<span class="normal">739</span> +<span class="normal">740</span> +<span class="normal">741</span> +<span class="normal">742</span> +<span class="normal">743</span> +<span class="normal">744</span> +<span class="normal">745</span> +<span class="normal">746</span> +<span class="normal">747</span> +<span class="normal">748</span> +<span class="normal">749</span> +<span class="normal">750</span> +<span class="normal">751</span> +<span class="normal">752</span> +<span class="normal">753</span> +<span class="normal">754</span> +<span class="normal">755</span> +<span class="normal">756</span> +<span class="normal">757</span> +<span class="normal">758</span> +<span class="normal">759</span> +<span class="normal">760</span> +<span class="normal">761</span> +<span class="normal">762</span> +<span class="normal">763</span> +<span class="normal">764</span> +<span class="normal">765</span> +<span class="normal">766</span> +<span class="normal">767</span> +<span class="normal">768</span> +<span class="normal">769</span> +<span class="normal">770</span> +<span class="normal">771</span> +<span class="normal">772</span> +<span class="normal">773</span> +<span class="normal">774</span> +<span class="normal">775</span> +<span class="normal">776</span> +<span class="normal">777</span> +<span class="normal">778</span> +<span class="normal">779</span> +<span class="normal">780</span> +<span class="normal">781</span> +<span class="normal">782</span> +<span class="normal">783</span> +<span class="normal">784</span> +<span class="normal">785</span> +<span class="normal">786</span> +<span class="normal">787</span> +<span class="normal">788</span> +<span class="normal">789</span> +<span class="normal">790</span> +<span class="normal">791</span> +<span class="normal">792</span> +<span class="normal">793</span> +<span class="normal">794</span> +<span class="normal">795</span> +<span class="normal">796</span> +<span class="normal">797</span> +<span class="normal">798</span> +<span class="normal">799</span> +<span class="normal">800</span> +<span class="normal">801</span> +<span class="normal">802</span> +<span class="normal">803</span> +<span class="normal">804</span> +<span class="normal">805</span> +<span class="normal">806</span> +<span class="normal">807</span> +<span class="normal">808</span> +<span class="normal">809</span> +<span class="normal">810</span> +<span class="normal">811</span> +<span class="normal">812</span> +<span class="normal">813</span> +<span class="normal">814</span> +<span class="normal">815</span> +<span class="normal">816</span> +<span class="normal">817</span> +<span class="normal">818</span> +<span class="normal">819</span> +<span class="normal">820</span> +<span class="normal">821</span> +<span class="normal">822</span> +<span class="normal">823</span> +<span class="normal">824</span> +<span class="normal">825</span> +<span class="normal">826</span> +<span class="normal">827</span> +<span class="normal">828</span> +<span class="normal">829</span> +<span class="normal">830</span> +<span class="normal">831</span> +<span class="normal">832</span> +<span class="normal">833</span> +<span class="normal">834</span> +<span class="normal">835</span> +<span class="normal">836</span> +<span class="normal">837</span> +<span class="normal">838</span> +<span class="normal">839</span> +<span class="normal">840</span> +<span class="normal">841</span> +<span class="normal">842</span> +<span class="normal">843</span> +<span class="normal">844</span> +<span class="normal">845</span> +<span class="normal">846</span> +<span class="normal">847</span> +<span class="normal">848</span> +<span class="normal">849</span> +<span class="normal">850</span> +<span class="normal">851</span> +<span class="normal">852</span> +<span class="normal">853</span> +<span class="normal">854</span> +<span class="normal">855</span> +<span class="normal">856</span> +<span class="normal">857</span> +<span class="normal">858</span> +<span class="normal">859</span> +<span class="normal">860</span> +<span class="normal">861</span> +<span class="normal">862</span> +<span class="normal">863</span> +<span class="normal">864</span> +<span class="normal">865</span> +<span class="normal">866</span> +<span class="normal">867</span> +<span class="normal">868</span> +<span class="normal">869</span> +<span class="normal">870</span> +<span class="normal">871</span> +<span class="normal">872</span> +<span class="normal">873</span> +<span class="normal">874</span> +<span class="normal">875</span> +<span class="normal">876</span> +<span class="normal">877</span> +<span class="normal">878</span> +<span class="normal">879</span> +<span class="normal">880</span> +<span class="normal">881</span> +<span class="normal">882</span> +<span class="normal">883</span> +<span class="normal">884</span> +<span class="normal">885</span> +<span class="normal">886</span> +<span class="normal">887</span> +<span class="normal">888</span> +<span class="normal">889</span> +<span class="normal">890</span> +<span class="normal">891</span> +<span class="normal">892</span> +<span class="normal">893</span> +<span class="normal">894</span> +<span class="normal">895</span> +<span class="normal">896</span> +<span class="normal">897</span> +<span class="normal">898</span> +<span class="normal">899</span> +<span class="normal">900</span> +<span class="normal">901</span> +<span class="normal">902</span> +<span class="normal">903</span> +<span class="normal">904</span> +<span class="normal">905</span> +<span class="normal">906</span> +<span class="normal">907</span> +<span class="normal">908</span> +<span class="normal">909</span> +<span class="normal">910</span> +<span class="normal">911</span> +<span class="normal">912</span> +<span class="normal">913</span> +<span class="normal">914</span> +<span class="normal">915</span> +<span class="normal">916</span> +<span class="normal">917</span> +<span class="normal">918</span> +<span class="normal">919</span> +<span class="normal">920</span> +<span class="normal">921</span> +<span class="normal">922</span> +<span class="normal">923</span> +<span class="normal">924</span> +<span class="normal">925</span> +<span class="normal">926</span> +<span class="normal">927</span> +<span class="normal">928</span> +<span class="normal">929</span> +<span class="normal">930</span> +<span class="normal">931</span> +<span class="normal">932</span> +<span class="normal">933</span> +<span class="normal">934</span> +<span class="normal">935</span> +<span class="normal">936</span> +<span class="normal">937</span> +<span class="normal">938</span> +<span class="normal">939</span> +<span class="normal">940</span> +<span class="normal">941</span> +<span class="normal">942</span> +<span class="normal">943</span> +<span class="normal">944</span> +<span class="normal">945</span> +<span class="normal">946</span> +<span class="normal">947</span> +<span class="normal">948</span> +<span class="normal">949</span> +<span class="normal">950</span> +<span class="normal">951</span> +<span class="normal">952</span> +<span class="normal">953</span> +<span class="normal">954</span> +<span class="normal">955</span> +<span class="normal">956</span> +<span class="normal">957</span> +<span class="normal">958</span> +<span class="normal">959</span> +<span class="normal">960</span> +<span class="normal">961</span> +<span class="normal">962</span> +<span class="normal">963</span> +<span class="normal">964</span> +<span class="normal">965</span> +<span class="normal">966</span> +<span class="normal">967</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * caja-dropbox.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Implements the Caja extension API for Dropbox.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><config.h></span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="cp"></span> +<a id="line-26" name="line-26"></a><span class="cp">#endif</span> +<a id="line-27" name="line-27"></a> +<a id="line-28" name="line-28"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span><span class="cp"></span> +<a id="line-29" name="line-29"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/socket.h></span><span class="cp"></span> +<a id="line-30" name="line-30"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/un.h></span><span class="cp"></span> +<a id="line-31" name="line-31"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><errno.h></span><span class="cp"></span> +<a id="line-32" name="line-32"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><unistd.h></span><span class="cp"></span> +<a id="line-33" name="line-33"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><ctype.h></span><span class="cp"></span> +<a id="line-34" name="line-34"></a> +<a id="line-35" name="line-35"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="cp"></span> +<a id="line-36" name="line-36"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib/gprintf.h></span><span class="cp"></span> +<a id="line-37" name="line-37"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib-object.h></span><span class="cp"></span> +<a id="line-38" name="line-38"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtk.h></span><span class="cp"></span> +<a id="line-39" name="line-39"></a> +<a id="line-40" name="line-40"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-extension-types.h></span><span class="cp"></span> +<a id="line-41" name="line-41"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-menu-provider.h></span><span class="cp"></span> +<a id="line-42" name="line-42"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="cp"></span> +<a id="line-43" name="line-43"></a> +<a id="line-44" name="line-44"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"g-util.h"</span><span class="cp"></span> +<a id="line-45" name="line-45"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-command-client.h"</span><span class="cp"></span> +<a id="line-46" name="line-46"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox.h"</span><span class="cp"></span> +<a id="line-47" name="line-47"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span><span class="cp"></span> +<a id="line-48" name="line-48"></a> +<a id="line-49" name="line-49"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">emblems</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s">"dropbox-uptodate"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-syncing"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-unsyncable"</span><span class="p">};</span><span class="w"></span> +<a id="line-50" name="line-50"></a><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">EMBLEMDIR</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-51" name="line-51"></a> +<a id="line-52" name="line-52"></a><span class="n">gboolean</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span><span class="w"></span> +<a id="line-53" name="line-53"></a> +<a id="line-54" name="line-54"></a><span class="k">static</span><span class="w"> </span><span class="n">GType</span><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-55" name="line-55"></a> +<a id="line-56" name="line-56"></a><span class="cm">/*</span> +<a id="line-57" name="line-57"></a><span class="cm"> Simplifies a path by removing navigation elements such as '.' and '..'</span> +<a id="line-58" name="line-58"></a> +<a id="line-59" name="line-59"></a><span class="cm"> Arguments:</span> +<a id="line-60" name="line-60"></a><span class="cm"> - path: input path to be canonicalized</span> +<a id="line-61" name="line-61"></a> +<a id="line-62" name="line-62"></a><span class="cm"> Returns:</span> +<a id="line-63" name="line-63"></a><span class="cm"> Canonicalized path if input path is valid.</span> +<a id="line-64" name="line-64"></a><span class="cm"> NULL otherwise.</span> +<a id="line-65" name="line-65"></a><span class="cm">*/</span><span class="w"></span> +<a id="line-66" name="line-66"></a><span class="k">static</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="w"></span> +<a id="line-67" name="line-67"></a><span class="nf">canonicalize_path</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-68" name="line-68"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-69" name="line-69"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-70" name="line-70"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">cpy</span><span class="p">,</span><span class="w"> </span><span class="o">**</span><span class="n">elts</span><span class="p">;</span><span class="w"></span> +<a id="line-71" name="line-71"></a> +<a id="line-72" name="line-72"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-73" name="line-73"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">);</span><span class="w"></span> +<a id="line-74" name="line-74"></a> +<a id="line-75" name="line-75"></a><span class="w"> </span><span class="n">elts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="s">"/"</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span> +<a id="line-76" name="line-76"></a><span class="w"> </span><span class="n">cpy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">g_strv_length</span><span class="p">(</span><span class="n">elts</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-77" name="line-77"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"/"</span><span class="p">;</span><span class="w"></span> +<a id="line-78" name="line-78"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-79" name="line-79"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">".."</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-80" name="line-80"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-81" name="line-81"></a><span class="w"> </span><span class="n">j</span><span class="o">--</span><span class="p">;</span><span class="w"></span> +<a id="line-82" name="line-82"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-83" name="line-83"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-84" name="line-84"></a><span class="w"> </span><span class="c1">// Input path has too many parent directory references and is invalid</span> +<a id="line-85" name="line-85"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-86" name="line-86"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span><span class="w"></span> +<a id="line-87" name="line-87"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-88" name="line-88"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-89" name="line-89"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"."</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-90" name="line-90"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">];</span><span class="w"></span> +<a id="line-91" name="line-91"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-92" name="line-92"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-93" name="line-93"></a> +<a id="line-94" name="line-94"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-95" name="line-95"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_build_filenamev</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span><span class="w"></span> +<a id="line-96" name="line-96"></a> +<a id="line-97" name="line-97"></a><span class="nl">exit</span><span class="p">:</span><span class="w"></span> +<a id="line-98" name="line-98"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span><span class="w"></span> +<a id="line-99" name="line-99"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">elts</span><span class="p">);</span><span class="w"></span> +<a id="line-100" name="line-100"></a> +<a id="line-101" name="line-101"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span><span class="w"></span> +<a id="line-102" name="line-102"></a><span class="p">}</span><span class="w"></span> +<a id="line-103" name="line-103"></a> +<a id="line-104" name="line-104"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-105" name="line-105"></a><span class="nf">reset_file</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-106" name="line-106"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"resetting file %p"</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-107" name="line-107"></a><span class="w"> </span><span class="n">caja_file_info_invalidate_extension_info</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-108" name="line-108"></a><span class="p">}</span><span class="w"></span> +<a id="line-109" name="line-109"></a> +<a id="line-110" name="line-110"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span><span class="w"></span> +<a id="line-111" name="line-111"></a><span class="nf">reset_all_files</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-112" name="line-112"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-113" name="line-113"></a> +<a id="line-114" name="line-114"></a><span class="w"> </span><span class="cm">/* this works because you can call a function pointer with</span> +<a id="line-115" name="line-115"></a><span class="cm"> more arguments than it takes */</span><span class="w"></span> +<a id="line-116" name="line-116"></a><span class="w"> </span><span class="n">g_hash_table_foreach</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GHFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_file</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-117" name="line-117"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-118" name="line-118"></a><span class="p">}</span><span class="w"></span> +<a id="line-119" name="line-119"></a> +<a id="line-120" name="line-120"></a> +<a id="line-121" name="line-121"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-122" name="line-122"></a><span class="nf">when_file_dies</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">address</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-123" name="line-123"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-124" name="line-124"></a> +<a id="line-125" name="line-125"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span><span class="w"></span> +<a id="line-126" name="line-126"></a> +<a id="line-127" name="line-127"></a><span class="w"> </span><span class="cm">/* we never got a change to view this file */</span><span class="w"></span> +<a id="line-128" name="line-128"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-129" name="line-129"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-130" name="line-130"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-131" name="line-131"></a> +<a id="line-132" name="line-132"></a><span class="w"> </span><span class="cm">/* too chatty */</span><span class="w"></span> +<a id="line-133" name="line-133"></a><span class="w"> </span><span class="cm">/* debug("removing %s <-> 0x%p", filename, address); */</span><span class="w"></span> +<a id="line-134" name="line-134"></a> +<a id="line-135" name="line-135"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-136" name="line-136"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span><span class="w"></span> +<a id="line-137" name="line-137"></a><span class="p">}</span><span class="w"></span> +<a id="line-138" name="line-138"></a> +<a id="line-139" name="line-139"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-140" name="line-140"></a><span class="nf">changed_cb</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-141" name="line-141"></a><span class="w"> </span><span class="cm">/* check if this file's path has changed, if so update the hash and invalidate</span> +<a id="line-142" name="line-142"></a><span class="cm"> the file */</span><span class="w"></span> +<a id="line-143" name="line-143"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">;</span><span class="w"></span> +<a id="line-144" name="line-144"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename2</span><span class="p">;</span><span class="w"></span> +<a id="line-145" name="line-145"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span><span class="w"></span> +<a id="line-146" name="line-146"></a> +<a id="line-147" name="line-147"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-148" name="line-148"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-149" name="line-149"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-150" name="line-150"></a> +<a id="line-151" name="line-151"></a><span class="w"> </span><span class="cm">/* Canonicalization will only null-out a non-null filename if it is invalid */</span><span class="w"></span> +<a id="line-152" name="line-152"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">((</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">));</span><span class="w"></span> +<a id="line-153" name="line-153"></a> +<a id="line-154" name="line-154"></a><span class="w"> </span><span class="n">filename2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-155" name="line-155"></a> +<a id="line-156" name="line-156"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-157" name="line-157"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-158" name="line-158"></a> +<a id="line-159" name="line-159"></a><span class="w"> </span><span class="cm">/* if filename2 is NULL we've never seen this file in update_file_info */</span><span class="w"></span> +<a id="line-160" name="line-160"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-161" name="line-161"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-162" name="line-162"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-163" name="line-163"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-164" name="line-164"></a> +<a id="line-165" name="line-165"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-166" name="line-166"></a><span class="w"> </span><span class="cm">/* A file has moved to offline storage. Lets remove it from our tables. */</span><span class="w"></span> +<a id="line-167" name="line-167"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-168" name="line-168"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span><span class="w"></span> +<a id="line-169" name="line-169"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-170" name="line-170"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-171" name="line-171"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-172" name="line-172"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-173" name="line-173"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-174" name="line-174"></a> +<a id="line-175" name="line-175"></a><span class="w"> </span><span class="cm">/* this is a hack, because caja doesn't do this for us, for some reason</span> +<a id="line-176" name="line-176"></a><span class="cm"> the file's path has changed */</span><span class="w"></span> +<a id="line-177" name="line-177"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-178" name="line-178"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shifty old: %s, new %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-179" name="line-179"></a> +<a id="line-180" name="line-180"></a><span class="w"> </span><span class="cm">/* gotta do this first, the call after this frees filename2 */</span><span class="w"></span> +<a id="line-181" name="line-181"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span><span class="w"></span> +<a id="line-182" name="line-182"></a> +<a id="line-183" name="line-183"></a><span class="w"> </span><span class="n">g_hash_table_replace</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span><span class="w"></span> +<a id="line-184" name="line-184"></a> +<a id="line-185" name="line-185"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-186" name="line-186"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span><span class="w"></span> +<a id="line-187" name="line-187"></a><span class="w"> </span><span class="cm">/* we shouldn't have another mapping from filename to an object */</span><span class="w"></span> +<a id="line-188" name="line-188"></a><span class="w"> </span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-189" name="line-189"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">f2</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-190" name="line-190"></a><span class="w"> </span><span class="cm">/* lets fix it if it's true, just remove the mapping */</span><span class="w"></span> +<a id="line-191" name="line-191"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-192" name="line-192"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span><span class="w"></span> +<a id="line-193" name="line-193"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-194" name="line-194"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-195" name="line-195"></a> +<a id="line-196" name="line-196"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-197" name="line-197"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-198" name="line-198"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-199" name="line-199"></a> +<a id="line-200" name="line-200"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-201" name="line-201"></a><span class="p">}</span><span class="w"></span> +<a id="line-202" name="line-202"></a> +<a id="line-203" name="line-203"></a><span class="k">static</span><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"></span> +<a id="line-204" name="line-204"></a><span class="nf">caja_dropbox_update_file_info</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-205" name="line-205"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"></span> +<a id="line-206" name="line-206"></a><span class="w"> </span><span class="n">GClosure</span><span class="w"> </span><span class="o">*</span><span class="n">update_complete</span><span class="p">,</span><span class="w"></span> +<a id="line-207" name="line-207"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">**</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-208" name="line-208"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">;</span><span class="w"></span> +<a id="line-209" name="line-209"></a> +<a id="line-210" name="line-210"></a><span class="w"> </span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-211" name="line-211"></a> +<a id="line-212" name="line-212"></a><span class="w"> </span><span class="cm">/* this code adds this file object to our two-way hash of file objects</span> +<a id="line-213" name="line-213"></a><span class="cm"> so we can shell touch these files later */</span><span class="w"></span> +<a id="line-214" name="line-214"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-215" name="line-215"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span><span class="w"></span> +<a id="line-216" name="line-216"></a> +<a id="line-217" name="line-217"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-218" name="line-218"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-219" name="line-219"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-220" name="line-220"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-221" name="line-221"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-222" name="line-222"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-223" name="line-223"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-224" name="line-224"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-225" name="line-225"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">stored_filename</span><span class="p">;</span><span class="w"></span> +<a id="line-226" name="line-226"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-227" name="line-227"></a> +<a id="line-228" name="line-228"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-229" name="line-229"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span><span class="w"></span> +<a id="line-230" name="line-230"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-231" name="line-231"></a><span class="w"> </span><span class="cm">/* pfilename path was invalid if canonicalize operation nulled it out */</span><span class="w"></span> +<a id="line-232" name="line-232"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span><span class="w"></span> +<a id="line-233" name="line-233"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-234" name="line-234"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-235" name="line-235"></a> +<a id="line-236" name="line-236"></a><span class="w"> </span><span class="cm">/* don't worry about the dup checks, gcc is smart enough to optimize this</span> +<a id="line-237" name="line-237"></a><span class="cm"> GCSE ftw */</span><span class="w"></span> +<a id="line-238" name="line-238"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">strcmp</span><span class="p">(</span><span class="n">stored_filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-239" name="line-239"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-240" name="line-240"></a> +<a id="line-241" name="line-241"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-242" name="line-242"></a><span class="w"> </span><span class="cm">/* this happens when the filename changes name on a file obj</span> +<a id="line-243" name="line-243"></a><span class="cm"> but changed_cb isn't called */</span><span class="w"></span> +<a id="line-244" name="line-244"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-245" name="line-245"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-246" name="line-246"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">stored_filename</span><span class="p">);</span><span class="w"></span> +<a id="line-247" name="line-247"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-248" name="line-248"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-249" name="line-249"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-250" name="line-250"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span><span class="w"></span> +<a id="line-251" name="line-251"></a> +<a id="line-252" name="line-252"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-253" name="line-253"></a><span class="w"> </span><span class="cm">/* if the filename exists in the filename2obj hash</span> +<a id="line-254" name="line-254"></a><span class="cm"> but the file obj doesn't exist in the obj2filename hash:</span> +<a id="line-255" name="line-255"></a> +<a id="line-256" name="line-256"></a><span class="cm"> this happens when caja allocates another file object</span> +<a id="line-257" name="line-257"></a><span class="cm"> for a filename without first deleting the original file object</span> +<a id="line-258" name="line-258"></a> +<a id="line-259" name="line-259"></a><span class="cm"> just remove the association to the older file object, it's obsolete</span> +<a id="line-260" name="line-260"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-261" name="line-261"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">f2</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-262" name="line-262"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">f2</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-263" name="line-263"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-264" name="line-264"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span><span class="w"></span> +<a id="line-265" name="line-265"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-266" name="line-266"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-267" name="line-267"></a> +<a id="line-268" name="line-268"></a><span class="w"> </span><span class="cm">/* too chatty */</span><span class="w"></span> +<a id="line-269" name="line-269"></a><span class="w"> </span><span class="cm">/* debug("adding %s <-> 0x%p", filename, file);*/</span><span class="w"></span> +<a id="line-270" name="line-270"></a><span class="w"> </span><span class="n">g_object_weak_ref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-271" name="line-271"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-272" name="line-272"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span><span class="w"></span> +<a id="line-273" name="line-273"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"changed"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-274" name="line-274"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-275" name="line-275"></a> +<a id="line-276" name="line-276"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-277" name="line-277"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-278" name="line-278"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-279" name="line-279"></a> +<a id="line-280" name="line-280"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">))</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-281" name="line-281"></a><span class="w"> </span><span class="n">caja_file_info_is_gone</span><span class="p">(</span><span class="n">file</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-282" name="line-282"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-283" name="line-283"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-284" name="line-284"></a> +<a id="line-285" name="line-285"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-286" name="line-286"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-287" name="line-287"></a> +<a id="line-288" name="line-288"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-289" name="line-289"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">provider</span><span class="p">;</span><span class="w"></span> +<a id="line-290" name="line-290"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GET_FILE_INFO</span><span class="p">;</span><span class="w"></span> +<a id="line-291" name="line-291"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_closure_ref</span><span class="p">(</span><span class="n">update_complete</span><span class="p">);</span><span class="w"></span> +<a id="line-292" name="line-292"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_ref</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-293" name="line-293"></a> +<a id="line-294" name="line-294"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">);</span><span class="w"></span> +<a id="line-295" name="line-295"></a> +<a id="line-296" name="line-296"></a><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">;</span><span class="w"></span> +<a id="line-297" name="line-297"></a> +<a id="line-298" name="line-298"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="w"></span> +<a id="line-299" name="line-299"></a><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="w"></span> +<a id="line-300" name="line-300"></a><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">CAJA_OPERATION_IN_PROGRESS</span><span class="p">;</span><span class="w"></span> +<a id="line-301" name="line-301"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-302" name="line-302"></a><span class="p">}</span><span class="w"></span> +<a id="line-303" name="line-303"></a> +<a id="line-304" name="line-304"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-305" name="line-305"></a><span class="nf">handle_shell_touch</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-306" name="line-306"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">path</span><span class="p">;</span><span class="w"></span> +<a id="line-307" name="line-307"></a> +<a id="line-308" name="line-308"></a><span class="w"> </span><span class="c1">// debug_enter();</span> +<a id="line-309" name="line-309"></a> +<a id="line-310" name="line-310"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-311" name="line-311"></a><span class="w"> </span><span class="n">path</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="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-312" name="line-312"></a><span class="hll"><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">;</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'file' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-313" name="line-313"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-314" name="line-314"></a> +<a id="line-315" name="line-315"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span><span class="w"></span> +<a id="line-316" name="line-316"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-317" name="line-317"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shell touch for %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-318" name="line-318"></a> +<a id="line-319" name="line-319"></a><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-320" name="line-320"></a> +<a id="line-321" name="line-321"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-322" name="line-322"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"gonna reset %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-323" name="line-323"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-324" name="line-324"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-325" name="line-325"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span><span class="w"></span> +<a id="line-326" name="line-326"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-327" name="line-327"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-328" name="line-328"></a> +<a id="line-329" name="line-329"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-330" name="line-330"></a><span class="p">}</span><span class="w"></span> +<a id="line-331" name="line-331"></a> +<a id="line-332" name="line-332"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-333" name="line-333"></a><span class="nf">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dficr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-334" name="line-334"></a> +<a id="line-335" name="line-335"></a><span class="w"> </span><span class="c1">//debug_enter();</span> +<a id="line-336" name="line-336"></a><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span><span class="w"></span> +<a id="line-337" name="line-337"></a> +<a id="line-338" name="line-338"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-339" name="line-339"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-340" name="line-340"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">isdir</span><span class="p">;</span><span class="w"></span> +<a id="line-341" name="line-341"></a> +<a id="line-342" name="line-342"></a><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">;</span><span class="w"></span> +<a id="line-343" name="line-343"></a> +<a id="line-344" name="line-344"></a><span class="w"> </span><span class="cm">/* if we have emblems just use them. */</span><span class="w"></span> +<a id="line-345" name="line-345"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-346" name="line-346"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">"emblems"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-347" name="line-347"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-348" name="line-348"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-349" name="line-349"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"></span> +<a id="line-350" name="line-350"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-351" name="line-351"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-352" name="line-352"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-353" name="line-353"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-354" name="line-354"></a><span class="w"> </span><span class="cm">/* if the file status command went okay */</span><span class="w"></span> +<a id="line-355" name="line-355"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-356" name="line-356"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"></span> +<a id="line-357" name="line-357"></a><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">"status"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-358" name="line-358"></a><span class="w"> </span><span class="p">((</span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">TRUE</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-359" name="line-359"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-360" name="line-360"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-361" name="line-361"></a> +<a id="line-362" name="line-362"></a><span class="w"> </span><span class="cm">/* set the tag emblem */</span><span class="w"></span> +<a id="line-363" name="line-363"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">isdir</span><span class="w"> </span><span class="o">&&</span><span class="w"></span> +<a id="line-364" name="line-364"></a><span class="w"> </span><span class="p">(</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">"tag"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-365" name="line-365"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-366" name="line-366"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"web"</span><span class="p">);</span><span class="w"></span> +<a id="line-367" name="line-367"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-368" name="line-368"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"shared"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-369" name="line-369"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"people"</span><span class="p">);</span><span class="w"></span> +<a id="line-370" name="line-370"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-371" name="line-371"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"photos"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-372" name="line-372"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"photos"</span><span class="p">);</span><span class="w"></span> +<a id="line-373" name="line-373"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-374" name="line-374"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"sandbox"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-375" name="line-375"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"star"</span><span class="p">);</span><span class="w"></span> +<a id="line-376" name="line-376"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-377" name="line-377"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-378" name="line-378"></a> +<a id="line-379" name="line-379"></a><span class="w"> </span><span class="cm">/* set the status emblem */</span><span class="w"></span> +<a id="line-380" name="line-380"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-381" name="line-381"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-382" name="line-382"></a> +<a id="line-383" name="line-383"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"up to date"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-384" name="line-384"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"></span> +<a id="line-385" name="line-385"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-386" name="line-386"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"syncing"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-387" name="line-387"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"></span> +<a id="line-388" name="line-388"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-389" name="line-389"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"unsyncable"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-390" name="line-390"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"></span> +<a id="line-391" name="line-391"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-392" name="line-392"></a> +<a id="line-393" name="line-393"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_code</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-394" name="line-394"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-395" name="line-395"></a><span class="cm"> debug("%s to %s", emblems[emblem_code-1],</span> +<a id="line-396" name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr->dfic->file),</span> +<a id="line-397" name="line-397"></a><span class="cm"> NULL, NULL));</span> +<a id="line-398" name="line-398"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-399" name="line-399"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">emblems</span><span class="p">[</span><span class="n">emblem_code</span><span class="mi">-1</span><span class="p">]);</span><span class="w"></span> +<a id="line-400" name="line-400"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-401" name="line-401"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-402" name="line-402"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span><span class="w"></span> +<a id="line-403" name="line-403"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-404" name="line-404"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-405" name="line-405"></a> +<a id="line-406" name="line-406"></a><span class="w"> </span><span class="cm">/* complete the info request */</span><span class="w"></span> +<a id="line-407" name="line-407"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-408" name="line-408"></a><span class="w"> </span><span class="n">caja_info_provider_update_complete_invoke</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">,</span><span class="w"></span> +<a id="line-409" name="line-409"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-410" name="line-410"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">,</span><span class="w"></span> +<a id="line-411" name="line-411"></a><span class="w"> </span><span class="n">result</span><span class="p">);</span><span class="w"></span> +<a id="line-412" name="line-412"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-413" name="line-413"></a> +<a id="line-414" name="line-414"></a><span class="w"> </span><span class="cm">/* destroy the objects we created */</span><span class="w"></span> +<a id="line-415" name="line-415"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-416" name="line-416"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">);</span><span class="w"></span> +<a id="line-417" name="line-417"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-418" name="line-418"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">);</span><span class="w"></span> +<a id="line-419" name="line-419"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span> +<a id="line-420" name="line-420"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">);</span><span class="w"></span> +<a id="line-421" name="line-421"></a> +<a id="line-422" name="line-422"></a><span class="w"> </span><span class="cm">/* unref the objects we didn't create */</span><span class="w"></span> +<a id="line-423" name="line-423"></a><span class="w"> </span><span class="n">g_closure_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">);</span><span class="w"></span> +<a id="line-424" name="line-424"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span><span class="w"></span> +<a id="line-425" name="line-425"></a> +<a id="line-426" name="line-426"></a><span class="w"> </span><span class="cm">/* now free the structs */</span><span class="w"></span> +<a id="line-427" name="line-427"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">);</span><span class="w"></span> +<a id="line-428" name="line-428"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="p">);</span><span class="w"></span> +<a id="line-429" name="line-429"></a> +<a id="line-430" name="line-430"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-431" name="line-431"></a><span class="p">}</span><span class="w"></span> +<a id="line-432" name="line-432"></a> +<a id="line-433" name="line-433"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-434" name="line-434"></a><span class="nf">caja_dropbox_cancel_update</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-435" name="line-435"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-436" name="line-436"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">handle</span><span class="p">;</span><span class="w"></span> +<a id="line-437" name="line-437"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-438" name="line-438"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-439" name="line-439"></a><span class="p">}</span><span class="w"></span> +<a id="line-440" name="line-440"></a> +<a id="line-441" name="line-441"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-442" name="line-442"></a><span class="nf">menu_item_cb</span><span class="p">(</span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">,</span><span class="w"></span> +<a id="line-443" name="line-443"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-444" name="line-444"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">verb</span><span class="p">;</span><span class="w"></span> +<a id="line-445" name="line-445"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">;</span><span class="w"></span> +<a id="line-446" name="line-446"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dcac</span><span class="p">;</span><span class="w"></span> +<a id="line-447" name="line-447"></a> +<a id="line-448" name="line-448"></a><span class="w"> </span><span class="n">dcac</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-449" name="line-449"></a> +<a id="line-450" name="line-450"></a><span class="w"> </span><span class="cm">/* maybe these would be better passed in a container</span> +<a id="line-451" name="line-451"></a><span class="cm"> struct used as the userdata pointer, oh well this</span> +<a id="line-452" name="line-452"></a><span class="cm"> is how dave camp does it */</span><span class="w"></span> +<a id="line-453" name="line-453"></a><span class="w"> </span><span class="n">files</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">);</span><span class="w"></span> +<a id="line-454" name="line-454"></a><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">);</span><span class="w"></span> +<a id="line-455" name="line-455"></a> +<a id="line-456" name="line-456"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span><span class="w"></span> +<a id="line-457" name="line-457"></a> +<a id="line-458" name="line-458"></a><span class="w"> </span><span class="cm">/* build the argument list */</span><span class="w"></span> +<a id="line-459" name="line-459"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-460" name="line-460"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-461" name="line-461"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-462" name="line-462"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span><span class="w"></span> +<a id="line-463" name="line-463"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-464" name="line-464"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span><span class="w"></span> +<a id="line-465" name="line-465"></a><span class="w"> </span><span class="n">guint</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-466" name="line-466"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">li</span><span class="p">;</span><span class="w"></span> +<a id="line-467" name="line-467"></a> +<a id="line-468" name="line-468"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-469" name="line-469"></a> +<a id="line-470" name="line-470"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-471" name="line-471"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">CAJA_FILE_INFO</span><span class="p">(</span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">));</span><span class="w"></span> +<a id="line-472" name="line-472"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-473" name="line-473"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-474" name="line-474"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">path</span><span class="p">)</span><span class="w"></span> +<a id="line-475" name="line-475"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"></span> +<a id="line-476" name="line-476"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">path</span><span class="p">;</span><span class="w"></span> +<a id="line-477" name="line-477"></a><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-478" name="line-478"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-479" name="line-479"></a> +<a id="line-480" name="line-480"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"></span> +<a id="line-481" name="line-481"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"></span> +<a id="line-482" name="line-482"></a><span class="w"> </span><span class="n">arglist</span><span class="p">);</span><span class="w"></span> +<a id="line-483" name="line-483"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-484" name="line-484"></a> +<a id="line-485" name="line-485"></a><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-486" name="line-486"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span><span class="w"></span> +<a id="line-487" name="line-487"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w"></span> +<a id="line-488" name="line-488"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">);</span><span class="w"></span> +<a id="line-489" name="line-489"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-490" name="line-490"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"verb"</span><span class="p">),</span><span class="w"> </span><span class="n">arglist</span><span class="p">);</span><span class="w"></span> +<a id="line-491" name="line-491"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-492" name="line-492"></a> +<a id="line-493" name="line-493"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_action"</span><span class="p">);</span><span class="w"></span> +<a id="line-494" name="line-494"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-495" name="line-495"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-496" name="line-496"></a> +<a id="line-497" name="line-497"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dcac</span><span class="p">);</span><span class="w"></span> +<a id="line-498" name="line-498"></a><span class="p">}</span><span class="w"></span> +<a id="line-499" name="line-499"></a> +<a id="line-500" name="line-500"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="nf">from_hex</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-501" name="line-501"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">isdigit</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">ch</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'0'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">tolower</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'a'</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"></span> +<a id="line-502" name="line-502"></a><span class="p">}</span><span class="w"></span> +<a id="line-503" name="line-503"></a> +<a id="line-504" name="line-504"></a><span class="c1">// decode in --> out, but dont fill more than n chars into out</span> +<a id="line-505" name="line-505"></a><span class="c1">// returns len of out if thing went well, -1 if n wasn't big enough</span> +<a id="line-506" name="line-506"></a><span class="c1">// can be used in place (whoa!)</span> +<a id="line-507" name="line-507"></a><span class="kt">int</span><span class="w"> </span><span class="nf">GhettoURLDecode</span><span class="p">(</span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-508" name="line-508"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">out_initial</span><span class="p">;</span><span class="w"></span> +<a id="line-509" name="line-509"></a> +<a id="line-510" name="line-510"></a><span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="n">out_initial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">out</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-511" name="line-511"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'%'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-512" name="line-512"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-513" name="line-513"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span><span class="w"></span> +<a id="line-514" name="line-514"></a><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"></span> +<a id="line-515" name="line-515"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-516" name="line-516"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-517" name="line-517"></a><span class="w"> </span><span class="c1">// Input string isn't well-formed</span> +<a id="line-518" name="line-518"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span> +<a id="line-519" name="line-519"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-520" name="line-520"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-521" name="line-521"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-522" name="line-522"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="p">;</span><span class="w"></span> +<a id="line-523" name="line-523"></a><span class="w"> </span><span class="n">in</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-524" name="line-524"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-525" name="line-525"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-526" name="line-526"></a> +<a id="line-527" name="line-527"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-528" name="line-528"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"></span> +<a id="line-529" name="line-529"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="p">;</span><span class="w"></span> +<a id="line-530" name="line-530"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-531" name="line-531"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span> +<a id="line-532" name="line-532"></a><span class="p">}</span><span class="w"></span> +<a id="line-533" name="line-533"></a> +<a id="line-534" name="line-534"></a><span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"></span> +<a id="line-535" name="line-535"></a><span class="nf">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">,</span><span class="w"></span> +<a id="line-536" name="line-536"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">menu</span><span class="p">,</span><span class="w"></span> +<a id="line-537" name="line-537"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">old_action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-538" name="line-538"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="p">,</span><span class="w"></span> +<a id="line-539" name="line-539"></a><span class="w"> </span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-540" name="line-540"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span><span class="w"></span> +<a id="line-541" name="line-541"></a><span class="p">{</span><span class="w"></span> +<a id="line-542" name="line-542"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-543" name="line-543"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span> +<a id="line-544" name="line-544"></a> +<a id="line-545" name="line-545"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-546" name="line-546"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">option_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"~"</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span><span class="w"></span> +<a id="line-547" name="line-547"></a><span class="w"> </span><span class="cm">/* if this is a valid string */</span><span class="w"></span> +<a id="line-548" name="line-548"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"></span> +<a id="line-549" name="line-549"></a><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-550" name="line-550"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span><span class="w"></span> +<a id="line-551" name="line-551"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span><span class="w"></span> +<a id="line-552" name="line-552"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-553" name="line-553"></a> +<a id="line-554" name="line-554"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span><span class="w"></span> +<a id="line-555" name="line-555"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_inner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span><span class="w"></span> +<a id="line-556" name="line-556"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span><span class="w"></span> +<a id="line-557" name="line-557"></a> +<a id="line-558" name="line-558"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_name</span><span class="p">));</span><span class="w"></span> +<a id="line-559" name="line-559"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">verb</span><span class="p">));</span><span class="w"></span> +<a id="line-560" name="line-560"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_inner</span><span class="p">));</span><span class="w"></span> +<a id="line-561" name="line-561"></a> +<a id="line-562" name="line-562"></a><span class="w"> </span><span class="c1">// If the inner section has a menu in it then we create a submenu. The verb will be ignored.</span> +<a id="line-563" name="line-563"></a><span class="w"> </span><span class="c1">// Otherwise add the verb to our map and add the menu item to the list.</span> +<a id="line-564" name="line-564"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="sc">'~'</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-565" name="line-565"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span><span class="w"></span> +<a id="line-566" name="line-566"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">suboptions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="s">"|"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span><span class="w"></span> +<a id="line-567" name="line-567"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span><span class="w"></span> +<a id="line-568" name="line-568"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">submenu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span><span class="w"></span> +<a id="line-569" name="line-569"></a> +<a id="line-570" name="line-570"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">);</span><span class="w"></span> +<a id="line-571" name="line-571"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="s">"::"</span><span class="p">);</span><span class="w"></span> +<a id="line-572" name="line-572"></a> +<a id="line-573" name="line-573"></a><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">suboptions</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">,</span><span class="w"> </span><span class="n">new_action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-574" name="line-574"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">);</span><span class="w"></span> +<a id="line-575" name="line-575"></a> +<a id="line-576" name="line-576"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"></span> +<a id="line-577" name="line-577"></a><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="s">""</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-578" name="line-578"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">);</span><span class="w"></span> +<a id="line-579" name="line-579"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-580" name="line-580"></a> +<a id="line-581" name="line-581"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">suboptions</span><span class="p">);</span><span class="w"></span> +<a id="line-582" name="line-582"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-583" name="line-583"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">submenu</span><span class="p">);</span><span class="w"></span> +<a id="line-584" name="line-584"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-585" name="line-585"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-586" name="line-586"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span><span class="w"></span> +<a id="line-587" name="line-587"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span><span class="w"></span> +<a id="line-588" name="line-588"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-589" name="line-589"></a> +<a id="line-590" name="line-590"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">);</span><span class="w"></span> +<a id="line-591" name="line-591"></a> +<a id="line-592" name="line-592"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">item_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'!'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-593" name="line-593"></a><span class="w"> </span><span class="n">item_name</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-594" name="line-594"></a><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-595" name="line-595"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-596" name="line-596"></a> +<a id="line-597" name="line-597"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-598" name="line-598"></a> +<a id="line-599" name="line-599"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-600" name="line-600"></a><span class="w"> </span><span class="cm">/* add the file metadata to this item */</span><span class="w"></span> +<a id="line-601" name="line-601"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">,</span><span class="w"></span> +<a id="line-602" name="line-602"></a><span class="w"> </span><span class="n">caja_file_info_list_copy</span><span class="w"> </span><span class="p">(</span><span class="n">files</span><span class="p">),</span><span class="w"></span> +<a id="line-603" name="line-603"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">caja_file_info_list_free</span><span class="p">);</span><span class="w"></span> +<a id="line-604" name="line-604"></a><span class="w"> </span><span class="cm">/* add the verb metadata */</span><span class="w"></span> +<a id="line-605" name="line-605"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">,</span><span class="w"></span> +<a id="line-606" name="line-606"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">),</span><span class="w"></span> +<a id="line-607" name="line-607"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span><span class="w"></span> +<a id="line-608" name="line-608"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="w"> </span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="s">"activate"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="w"> </span><span class="p">(</span><span class="n">menu_item_cb</span><span class="p">),</span><span class="w"> </span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-609" name="line-609"></a> +<a id="line-610" name="line-610"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">grayed_out</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-611" name="line-611"></a><span class="w"> </span><span class="n">GValue</span><span class="w"> </span><span class="n">sensitive</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-612" name="line-612"></a><span class="w"> </span><span class="n">g_value_init</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">G_TYPE_BOOLEAN</span><span class="p">);</span><span class="w"></span> +<a id="line-613" name="line-613"></a><span class="w"> </span><span class="n">g_value_set_boolean</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span><span class="w"></span> +<a id="line-614" name="line-614"></a><span class="w"> </span><span class="n">g_object_set_property</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"sensitive"</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">sensitive</span><span class="p">);</span><span class="w"></span> +<a id="line-615" name="line-615"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-616" name="line-616"></a> +<a id="line-617" name="line-617"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span><span class="w"></span> +<a id="line-618" name="line-618"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-619" name="line-619"></a><span class="w"> </span><span class="n">ret</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-620" name="line-620"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-621" name="line-621"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span><span class="w"></span> +<a id="line-622" name="line-622"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-623" name="line-623"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span><span class="w"></span> +<a id="line-624" name="line-624"></a><span class="p">}</span><span class="w"></span> +<a id="line-625" name="line-625"></a> +<a id="line-626" name="line-626"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-627" name="line-627"></a><span class="nf">get_file_items_callback</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"></span> +<a id="line-628" name="line-628"></a><span class="p">{</span><span class="w"></span> +<a id="line-629" name="line-629"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span><span class="w"></span> +<a id="line-630" name="line-630"></a> +<a id="line-631" name="line-631"></a><span class="w"> </span><span class="cm">/* queue_push doesn't accept NULL as a value so we create an empty hash table</span> +<a id="line-632" name="line-632"></a><span class="cm"> * if we got no response. */</span><span class="w"></span> +<a id="line-633" name="line-633"></a><span class="w"> </span><span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">response</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"></span> +<a id="line-634" name="line-634"></a><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">));</span><span class="w"></span> +<a id="line-635" name="line-635"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-636" name="line-636"></a><span class="p">}</span><span class="w"></span> +<a id="line-637" name="line-637"></a> +<a id="line-638" name="line-638"></a> +<a id="line-639" name="line-639"></a><span class="k">static</span><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="w"></span> +<a id="line-640" name="line-640"></a><span class="nf">caja_dropbox_get_file_items</span><span class="p">(</span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span><span class="w"></span> +<a id="line-641" name="line-641"></a><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">window</span><span class="p">,</span><span class="w"></span> +<a id="line-642" name="line-642"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span><span class="w"></span> +<a id="line-643" name="line-643"></a><span class="p">{</span><span class="w"></span> +<a id="line-644" name="line-644"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-645" name="line-645"></a><span class="cm"> * 1. Convert files to filenames.</span> +<a id="line-646" name="line-646"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-647" name="line-647"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">);</span><span class="w"></span> +<a id="line-648" name="line-648"></a> +<a id="line-649" name="line-649"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file_count</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"></span> +<a id="line-650" name="line-650"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-651" name="line-651"></a> +<a id="line-652" name="line-652"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-653" name="line-653"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-654" name="line-654"></a><span class="w"> </span><span class="n">GList</span><span class="o">*</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"></span> +<a id="line-655" name="line-655"></a> +<a id="line-656" name="line-656"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elem</span><span class="o">-></span><span class="n">next</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-657" name="line-657"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">elem</span><span class="o">-></span><span class="n">data</span><span class="p">);</span><span class="w"></span> +<a id="line-658" name="line-658"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename_un</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-659" name="line-659"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename_un</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-660" name="line-660"></a> +<a id="line-661" name="line-661"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span><span class="w"></span> +<a id="line-662" name="line-662"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span><span class="w"></span> +<a id="line-663" name="line-663"></a> +<a id="line-664" name="line-664"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-665" name="line-665"></a><span class="w"> </span><span class="cm">/* oooh, filename wasn't correctly encoded, or isn't a local file. */</span><span class="w"></span> +<a id="line-666" name="line-666"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-667" name="line-667"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-668" name="line-668"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-669" name="line-669"></a> +<a id="line-670" name="line-670"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename</span><span class="p">;</span><span class="w"></span> +<a id="line-671" name="line-671"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-672" name="line-672"></a> +<a id="line-673" name="line-673"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_new_full</span><span class="p">((</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="n">g_hash_table_unref</span><span class="p">);</span><span class="w"></span> +<a id="line-674" name="line-674"></a> +<a id="line-675" name="line-675"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-676" name="line-676"></a><span class="cm"> * 2. Create a DropboxGeneralCommand to call "icon_overlay_context_options"</span> +<a id="line-677" name="line-677"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-678" name="line-678"></a> +<a id="line-679" name="line-679"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span> +<a id="line-680" name="line-680"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span><span class="w"></span> +<a id="line-681" name="line-681"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_options"</span><span class="p">);</span><span class="w"></span> +<a id="line-682" name="line-682"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-683" name="line-683"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-684" name="line-684"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-685" name="line-685"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span><span class="w"></span> +<a id="line-686" name="line-686"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"> </span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-687" name="line-687"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">get_file_items_callback</span><span class="p">;</span><span class="w"></span> +<a id="line-688" name="line-688"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_ref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-689" name="line-689"></a> +<a id="line-690" name="line-690"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-691" name="line-691"></a><span class="cm"> * 3. Queue it up for the helper thread to run it.</span> +<a id="line-692" name="line-692"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-693" name="line-693"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span><span class="w"></span> +<a id="line-694" name="line-694"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dgc</span><span class="p">);</span><span class="w"></span> +<a id="line-695" name="line-695"></a> +<a id="line-696" name="line-696"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-697" name="line-697"></a><span class="cm"> * 4. We have to block until it's done because caja expects a reply. But we will</span> +<a id="line-698" name="line-698"></a><span class="cm"> * only block for 50 ms for a reply.</span> +<a id="line-699" name="line-699"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-700" name="line-700"></a> +<a id="line-701" name="line-701"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">context_options_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="mi">50000</span><span class="p">);</span><span class="w"></span> +<a id="line-702" name="line-702"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span><span class="w"></span> +<a id="line-703" name="line-703"></a> +<a id="line-704" name="line-704"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">context_options_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-705" name="line-705"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-706" name="line-706"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-707" name="line-707"></a> +<a id="line-708" name="line-708"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-709" name="line-709"></a><span class="cm"> * 5. Parse the reply.</span> +<a id="line-710" name="line-710"></a><span class="cm"> */</span><span class="w"></span> +<a id="line-711" name="line-711"></a> +<a id="line-712" name="line-712"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">,</span><span class="w"> </span><span class="s">"options"</span><span class="p">);</span><span class="w"></span> +<a id="line-713" name="line-713"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-714" name="line-714"></a> +<a id="line-715" name="line-715"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-716" name="line-716"></a><span class="w"> </span><span class="cm">/* build the menu */</span><span class="w"></span> +<a id="line-717" name="line-717"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">root_item</span><span class="p">;</span><span class="w"></span> +<a id="line-718" name="line-718"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">root_menu</span><span class="p">;</span><span class="w"></span> +<a id="line-719" name="line-719"></a> +<a id="line-720" name="line-720"></a><span class="w"> </span><span class="n">root_menu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span><span class="w"></span> +<a id="line-721" name="line-721"></a><span class="w"> </span><span class="n">root_item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="s">"CajaDropbox::root_item"</span><span class="p">,</span><span class="w"></span> +<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">"Dropbox"</span><span class="p">,</span><span class="w"> </span><span class="s">"Dropbox Options"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox"</span><span class="p">);</span><span class="w"></span> +<a id="line-723" name="line-723"></a> +<a id="line-724" name="line-724"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_append</span><span class="p">(</span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">root_item</span><span class="p">);</span><span class="w"></span> +<a id="line-725" name="line-725"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="s">"CajaDropbox::"</span><span class="p">);</span><span class="w"></span> +<a id="line-726" name="line-726"></a> +<a id="line-727" name="line-727"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">options</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">,</span><span class="w"> </span><span class="n">action_string</span><span class="p">,</span><span class="w"></span> +<a id="line-728" name="line-728"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-729" name="line-729"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">toret</span><span class="p">);</span><span class="w"></span> +<a id="line-730" name="line-730"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-731" name="line-731"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-732" name="line-732"></a> +<a id="line-733" name="line-733"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">root_item</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">);</span><span class="w"></span> +<a id="line-734" name="line-734"></a> +<a id="line-735" name="line-735"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span><span class="w"></span> +<a id="line-736" name="line-736"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">root_menu</span><span class="p">);</span><span class="w"></span> +<a id="line-737" name="line-737"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-738" name="line-738"></a> +<a id="line-739" name="line-739"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">);</span><span class="w"></span> +<a id="line-740" name="line-740"></a> +<a id="line-741" name="line-741"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span><span class="w"></span> +<a id="line-742" name="line-742"></a><span class="p">}</span><span class="w"></span> +<a id="line-743" name="line-743"></a> +<a id="line-744" name="line-744"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-745" name="line-745"></a><span class="nf">add_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-746" name="line-746"></a><span class="p">{</span><span class="w"></span> +<a id="line-747" name="line-747"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-748" name="line-748"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-749" name="line-749"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-750" name="line-750"></a> +<a id="line-751" name="line-751"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="p">;</span><span class="w"></span> +<a id="line-752" name="line-752"></a><span class="hll"><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-753" name="line-753"></a> +<a id="line-754" name="line-754"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="n">theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span><span class="w"></span> +<a id="line-755" name="line-755"></a> +<a id="line-756" name="line-756"></a><span class="hll"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">&&</span><span class="w"></span><span class="error2"><--- Condition 'emblem_paths_response' is always true</span> +</span><a id="line-757" name="line-757"></a><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-758" name="line-758"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-759" name="line-759"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"></span> +<a id="line-760" name="line-760"></a><span class="w"> </span><span class="n">gtk_icon_theme_append_search_path</span><span class="p">(</span><span class="n">theme</span><span class="p">,</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-761" name="line-761"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-762" name="line-762"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-763" name="line-763"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-764" name="line-764"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-765" name="line-765"></a><span class="p">}</span><span class="w"></span> +<a id="line-766" name="line-766"></a> +<a id="line-767" name="line-767"></a><span class="n">gboolean</span><span class="w"></span> +<a id="line-768" name="line-768"></a><span class="nf">remove_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-769" name="line-769"></a><span class="p">{</span><span class="w"></span> +<a id="line-770" name="line-770"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span><span class="w"></span> +<a id="line-771" name="line-771"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"></span> +<a id="line-772" name="line-772"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-773" name="line-773"></a> +<a id="line-774" name="line-774"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">);</span><span class="w"></span> +<a id="line-775" name="line-775"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_list</span><span class="p">)</span><span class="w"></span> +<a id="line-776" name="line-776"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span><span class="w"></span> +<a id="line-777" name="line-777"></a> +<a id="line-778" name="line-778"></a><span class="w"> </span><span class="c1">// We need to remove the old paths.</span> +<a id="line-779" name="line-779"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">icon_theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span><span class="w"></span> +<a id="line-780" name="line-780"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="w"> </span><span class="n">paths</span><span class="p">;</span><span class="w"></span> +<a id="line-781" name="line-781"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"></span> +<a id="line-782" name="line-782"></a> +<a id="line-783" name="line-783"></a><span class="w"> </span><span class="n">gtk_icon_theme_get_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">path_count</span><span class="p">);</span><span class="w"></span> +<a id="line-784" name="line-784"></a> +<a id="line-785" name="line-785"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span> +<a id="line-786" name="line-786"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-787" name="line-787"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-788" name="line-788"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-789" name="line-789"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-790" name="line-790"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-791" name="line-791"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">g_strcmp0</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-792" name="line-792"></a><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span><span class="w"></span> +<a id="line-793" name="line-793"></a><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-794" name="line-794"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span> +<a id="line-795" name="line-795"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span><span class="w"></span> +<a id="line-796" name="line-796"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-797" name="line-797"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-798" name="line-798"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-799" name="line-799"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keep</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-800" name="line-800"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">];</span><span class="w"></span> +<a id="line-801" name="line-801"></a><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">;</span><span class="w"></span> +<a id="line-802" name="line-802"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-803" name="line-803"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-804" name="line-804"></a> +<a id="line-805" name="line-805"></a><span class="w"> </span><span class="cm">/* If we found one we need to reset the path to</span> +<a id="line-806" name="line-806"></a><span class="cm"> accomodate the changes */</span><span class="w"></span> +<a id="line-807" name="line-807"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">found</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-808" name="line-808"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Clear the last one */</span><span class="w"></span> +<a id="line-809" name="line-809"></a><span class="w"> </span><span class="n">gtk_icon_theme_set_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="p">)</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="p">);</span><span class="w"></span> +<a id="line-810" name="line-810"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-811" name="line-811"></a> +<a id="line-812" name="line-812"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span><span class="w"></span> +<a id="line-813" name="line-813"></a><span class="nl">exit</span><span class="p">:</span><span class="w"></span> +<a id="line-814" name="line-814"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-815" name="line-815"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span><span class="w"></span> +<a id="line-816" name="line-816"></a><span class="p">}</span><span class="w"></span> +<a id="line-817" name="line-817"></a> +<a id="line-818" name="line-818"></a><span class="kt">void</span><span class="w"> </span><span class="nf">get_emblem_paths_cb</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"></span> +<a id="line-819" name="line-819"></a><span class="p">{</span><span class="w"></span> +<a id="line-820" name="line-820"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-821" name="line-821"></a><span class="w"> </span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-822" name="line-822"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">);</span><span class="w"></span> +<a id="line-823" name="line-823"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">,</span><span class="w"> </span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">);</span><span class="w"></span> +<a id="line-824" name="line-824"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-825" name="line-825"></a><span class="w"> </span><span class="cm">/* Increase the ref so that finish_general_command doesn't delete it. */</span><span class="w"></span> +<a id="line-826" name="line-826"></a><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span><span class="w"></span> +<a id="line-827" name="line-827"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-828" name="line-828"></a> +<a id="line-829" name="line-829"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-830" name="line-830"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-831" name="line-831"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span><span class="w"></span> +<a id="line-832" name="line-832"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-833" name="line-833"></a><span class="w"> </span><span class="p">}</span><span class="w"></span> +<a id="line-834" name="line-834"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">;</span><span class="w"></span> +<a id="line-835" name="line-835"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-836" name="line-836"></a> +<a id="line-837" name="line-837"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">add_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">));</span><span class="w"></span> +<a id="line-838" name="line-838"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_all_files</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-839" name="line-839"></a><span class="p">}</span><span class="w"></span> +<a id="line-840" name="line-840"></a> +<a id="line-841" name="line-841"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-842" name="line-842"></a><span class="nf">on_connect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-843" name="line-843"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-844" name="line-844"></a> +<a id="line-845" name="line-845"></a><span class="w"> </span><span class="n">dropbox_command_client_send_command</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"></span> +<a id="line-846" name="line-846"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)</span><span class="w"> </span><span class="n">get_emblem_paths_cb</span><span class="p">,</span><span class="w"></span> +<a id="line-847" name="line-847"></a><span class="hll"><span class="w"> </span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="s">"get_emblem_paths"</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span><div class="verbose expandable"><span class="error2"><--- Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. <span class="marker">[+]</span></span><div class="content">Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. +The C99 standard, in section 7.15.1.1, states that if the type used by va_arg() is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined. +The value of the NULL macro is an implementation-defined null pointer constant (7.17), which can be any integer constant expression with the value 0, or such an expression casted to (void*) (6.3.2.3). This includes values like 0, 0L, or even 0LL. +In practice on common architectures, this will cause real crashes if sizeof(int) != sizeof(void*), and NULL is defined to 0 or any other null pointer constant that promotes to int. +To reproduce you might be able to use this little code example on 64bit platforms. If the output includes "ERROR", the sentinel had only 4 out of 8 bytes initialized to zero and was not detected as the final argument to stop argument processing via va_arg(). Changing the 0 to (void*)0 or 0L will make the "ERROR" output go away. +#include <stdarg.h> +#include <stdio.h> + +void f(char *s, ...) { + va_list ap; + va_start(ap,s); + for (;;) { + char *p = va_arg(ap,char*); + printf("%018p, %s\n", p, (long)p & 255 ? p : ""); + if(!p) break; + } + va_end(ap); +} + +void g() { + char *s2 = "x"; + char *s3 = "ERROR"; + + // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64 + f("first", s2, s2, s2, s2, s2, 0, s3, (char*)0); +} + +void h() { + int i; + volatile unsigned char a[1000]; + for (i = 0; i<sizeof(a); i++) + a[i] = -1; +} + +int main() { + h(); + g(); + return 0; +}</div></div> +</span><a id="line-848" name="line-848"></a><span class="p">}</span><span class="w"></span> +<a id="line-849" name="line-849"></a> +<a id="line-850" name="line-850"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-851" name="line-851"></a><span class="nf">on_disconnect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-852" name="line-852"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-853" name="line-853"></a> +<a id="line-854" name="line-854"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-855" name="line-855"></a><span class="w"> </span><span class="cm">/* This call will free the data too. */</span><span class="w"></span> +<a id="line-856" name="line-856"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span><span class="w"></span> +<a id="line-857" name="line-857"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-858" name="line-858"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-859" name="line-859"></a><span class="p">}</span><span class="w"></span> +<a id="line-860" name="line-860"></a> +<a id="line-861" name="line-861"></a> +<a id="line-862" name="line-862"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-863" name="line-863"></a><span class="nf">caja_dropbox_menu_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaMenuProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-864" name="line-864"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">get_file_items</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_get_file_items</span><span class="p">;</span><span class="w"></span> +<a id="line-865" name="line-865"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-866" name="line-866"></a><span class="p">}</span><span class="w"></span> +<a id="line-867" name="line-867"></a> +<a id="line-868" name="line-868"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-869" name="line-869"></a><span class="nf">caja_dropbox_info_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaInfoProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-870" name="line-870"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">update_file_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_update_file_info</span><span class="p">;</span><span class="w"></span> +<a id="line-871" name="line-871"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">cancel_update</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_cancel_update</span><span class="p">;</span><span class="w"></span> +<a id="line-872" name="line-872"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-873" name="line-873"></a><span class="p">}</span><span class="w"></span> +<a id="line-874" name="line-874"></a> +<a id="line-875" name="line-875"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-876" name="line-876"></a><span class="nf">caja_dropbox_instance_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-877" name="line-877"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-878" name="line-878"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-879" name="line-879"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"></span> +<a id="line-880" name="line-880"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"></span> +<a id="line-881" name="line-881"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_hash</span><span class="p">,</span><span class="w"></span> +<a id="line-882" name="line-882"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_equal</span><span class="p">,</span><span class="w"></span> +<a id="line-883" name="line-883"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-884" name="line-884"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span><span class="w"></span> +<a id="line-885" name="line-885"></a><span class="w"> </span><span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span><span class="w"></span> +<a id="line-886" name="line-886"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"></span> +<a id="line-887" name="line-887"></a> +<a id="line-888" name="line-888"></a><span class="w"> </span><span class="cm">/* setup the connection obj*/</span><span class="w"></span> +<a id="line-889" name="line-889"></a><span class="w"> </span><span class="n">dropbox_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span><span class="w"></span> +<a id="line-890" name="line-890"></a> +<a id="line-891" name="line-891"></a><span class="w"> </span><span class="cm">/* our hooks */</span><span class="w"></span> +<a id="line-892" name="line-892"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span><span class="w"> </span><span class="s">"shell_touch"</span><span class="p">,</span><span class="w"></span> +<a id="line-893" name="line-893"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxUpdateHook</span><span class="p">)</span><span class="w"> </span><span class="n">handle_shell_touch</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-894" name="line-894"></a> +<a id="line-895" name="line-895"></a><span class="w"> </span><span class="cm">/* add connection handlers */</span><span class="w"></span> +<a id="line-896" name="line-896"></a><span class="w"> </span><span class="n">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span><span class="w"></span> +<a id="line-897" name="line-897"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_connect</span><span class="p">,</span><span class="w"></span> +<a id="line-898" name="line-898"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-899" name="line-899"></a><span class="w"> </span><span class="n">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span><span class="w"></span> +<a id="line-900" name="line-900"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_disconnect</span><span class="p">,</span><span class="w"></span> +<a id="line-901" name="line-901"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span><span class="w"></span> +<a id="line-902" name="line-902"></a> +<a id="line-903" name="line-903"></a><span class="w"> </span><span class="cm">/* now start the connection */</span><span class="w"></span> +<a id="line-904" name="line-904"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"about to start client connection"</span><span class="p">);</span><span class="w"></span> +<a id="line-905" name="line-905"></a><span class="w"> </span><span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span><span class="w"></span> +<a id="line-906" name="line-906"></a> +<a id="line-907" name="line-907"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span> +<a id="line-908" name="line-908"></a><span class="p">}</span><span class="w"></span> +<a id="line-909" name="line-909"></a> +<a id="line-910" name="line-910"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-911" name="line-911"></a><span class="nf">caja_dropbox_class_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-912" name="line-912"></a><span class="p">}</span><span class="w"></span> +<a id="line-913" name="line-913"></a> +<a id="line-914" name="line-914"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"></span> +<a id="line-915" name="line-915"></a><span class="nf">caja_dropbox_class_finalize</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-916" name="line-916"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"just checking"</span><span class="p">);</span><span class="w"></span> +<a id="line-917" name="line-917"></a><span class="w"> </span><span class="cm">/* kill threads here? */</span><span class="w"></span> +<a id="line-918" name="line-918"></a><span class="p">}</span><span class="w"></span> +<a id="line-919" name="line-919"></a> +<a id="line-920" name="line-920"></a><span class="n">GType</span><span class="w"></span> +<a id="line-921" name="line-921"></a><span class="nf">caja_dropbox_get_type</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-922" name="line-922"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_type</span><span class="p">;</span><span class="w"></span> +<a id="line-923" name="line-923"></a><span class="p">}</span><span class="w"></span> +<a id="line-924" name="line-924"></a> +<a id="line-925" name="line-925"></a><span class="kt">void</span><span class="w"></span> +<a id="line-926" name="line-926"></a><span class="nf">caja_dropbox_register_type</span><span class="w"> </span><span class="p">(</span><span class="n">GTypeModule</span><span class="w"> </span><span class="o">*</span><span class="n">module</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-927" name="line-927"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GTypeInfo</span><span class="w"> </span><span class="n">info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-928" name="line-928"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="p">),</span><span class="w"></span> +<a id="line-929" name="line-929"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseInitFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-930" name="line-930"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-931" name="line-931"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_init</span><span class="p">,</span><span class="w"></span> +<a id="line-932" name="line-932"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_finalize</span><span class="p">,</span><span class="w"></span> +<a id="line-933" name="line-933"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-934" name="line-934"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="p">),</span><span class="w"></span> +<a id="line-935" name="line-935"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"></span> +<a id="line-936" name="line-936"></a><span class="w"> </span><span class="p">(</span><span class="n">GInstanceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_instance_init</span><span class="p">,</span><span class="w"></span> +<a id="line-937" name="line-937"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-938" name="line-938"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-939" name="line-939"></a> +<a id="line-940" name="line-940"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">menu_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-941" name="line-941"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_menu_provider_iface_init</span><span class="p">,</span><span class="w"></span> +<a id="line-942" name="line-942"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-943" name="line-943"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-944" name="line-944"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-945" name="line-945"></a> +<a id="line-946" name="line-946"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">info_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"></span> +<a id="line-947" name="line-947"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_info_provider_iface_init</span><span class="p">,</span><span class="w"></span> +<a id="line-948" name="line-948"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"></span> +<a id="line-949" name="line-949"></a><span class="w"> </span><span class="nb">NULL</span><span class="w"></span> +<a id="line-950" name="line-950"></a><span class="w"> </span><span class="p">};</span><span class="w"></span> +<a id="line-951" name="line-951"></a> +<a id="line-952" name="line-952"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"></span> +<a id="line-953" name="line-953"></a><span class="w"> </span><span class="n">g_type_module_register_type</span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-954" name="line-954"></a><span class="w"> </span><span class="n">G_TYPE_OBJECT</span><span class="p">,</span><span class="w"></span> +<a id="line-955" name="line-955"></a><span class="w"> </span><span class="s">"CajaDropbox"</span><span class="p">,</span><span class="w"></span> +<a id="line-956" name="line-956"></a><span class="w"> </span><span class="o">&</span><span class="n">info</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span><span class="w"></span> +<a id="line-957" name="line-957"></a> +<a id="line-958" name="line-958"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-959" name="line-959"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span><span class="w"></span> +<a id="line-960" name="line-960"></a><span class="w"> </span><span class="n">CAJA_TYPE_MENU_PROVIDER</span><span class="p">,</span><span class="w"></span> +<a id="line-961" name="line-961"></a><span class="w"> </span><span class="o">&</span><span class="n">menu_provider_iface_info</span><span class="p">);</span><span class="w"></span> +<a id="line-962" name="line-962"></a> +<a id="line-963" name="line-963"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span><span class="w"></span> +<a id="line-964" name="line-964"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span><span class="w"></span> +<a id="line-965" name="line-965"></a><span class="w"> </span><span class="n">CAJA_TYPE_INFO_PROVIDER</span><span class="p">,</span><span class="w"></span> +<a id="line-966" name="line-966"></a><span class="w"> </span><span class="o">&</span><span class="n">info_provider_iface_info</span><span class="p">);</span><span class="w"></span> +<a id="line-967" name="line-967"></a><span class="p">}</span><span class="w"></span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.9 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/index.html b/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/index.html new file mode 100644 index 0000000..eb0d005 --- /dev/null +++ b/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/index.html @@ -0,0 +1,202 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox</h1> + <div id="filters"> + + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="error"disabled/>error</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="warning"disabled/>warning</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="portability"checked/>portability</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="performance"disabled/>performance</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="style"checked/>style</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="information"checked/>information</label> + | + <label class="checkBtn"><input type="checkbox" onclick="toggleTool(this)" id="cppcheck"checked/>cppcheck</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleTool(this)" id="clang-tidy"disabled/>clang-tidy</label> + | + <label class="severityHeader">File: <input type="text" oninput="filterFile(this.value)"/></label> + <label class="severityHeader">Filter: <input type="text" oninput="filterText(this.value)"/></label> + </div> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Defect summary</a> </p> + + <label><input type="checkbox" class="idToggle" onclick="toggleAll()" checked> Toggle all</label> + <table> + <tr><th>Show</th><th>#</th><th>Defect ID</th></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="variableScope" name="variableScope" checked></td><td>2</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>1</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="missingIncludeSystem" name="missingIncludeSystem" checked></td><td>1</td><td>missingIncludeSystem</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="varFuncNullUB" name="varFuncNullUB" checked></td><td>1</td><td>varFuncNullUB</td></tr> + <tr><td></td><td>5</td><td>total</td></tr> + </table> + <p><a href="stats.html">Statistics</a></p> + </div> + <div id="content_index"> + + <table class="summaryTable"> + <tr><th>Line</th><th>Id</th><th>CWE</th><th>Severity</th><th>Message</th></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="1.html"></a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Cppcheck cannot find all the include files (use --check-config for details)</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="0.html">src/caja-dropbox.c</a></td></tr> + <tr class="variableScope sev_style issue"><td><a href="0.html#line-312">312</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 'file' can be reduced.</td></tr> + <tr class="variableScope sev_style issue"><td><a href="0.html#line-752">752</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 'i' can be reduced.</td></tr> + <tr class="knownConditionTrueFalse sev_style issue"><td><a href="0.html#line-756">756</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td>Condition 'emblem_paths_response' is always true</td></tr> + <tr class="varFuncNullUB sev_portability issue"><td><a href="0.html#line-847">847</a></td><td>varFuncNullUB</td><td><a href="https://cwe.mitre.org/data/definitions/475.html">475</a></td><td>portability</td><td>Passing NULL after the last typed argument to a variadic function leads to undefined behaviour.</td></tr> + </tbody> + </table> + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.9 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/stats.html b/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/stats.html new file mode 100644 index 0000000..18955b2 --- /dev/null +++ b/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/stats.html @@ -0,0 +1,170 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: Statistics</h1> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Back to summary</a> </p> + + </div> + <div id="content_index"> +<p><span class="statHeader">Top 10 files for portability severity, total findings: 1</span><br> +   1 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> +<p><span class="statHeader">Top 10 files for style severity, total findings: 3</span><br> +   3 <a href="0.html"> src/caja-dropbox.c</a><br> +</p> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.9 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/style.css b/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/style.css new file mode 100644 index 0000000..3897bfa --- /dev/null +++ b/2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/style.css @@ -0,0 +1,177 @@ + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; + font-size: 13px; + line-height: 1.5; + height: 100%; + margin: 0; +} + +#wrapper { + position: fixed; + height: 100vh; + width: 100vw; + display: grid; + grid-template-rows: fit-content(8rem) auto fit-content(8rem); + grid-template-columns: fit-content(25%) 1fr; + grid-template-areas: + "header header" + "menu content" + "footer footer"; +} + +h1 { + margin: 0 0 8px -2px; + font-size: 175%; +} + +.header { + padding: 0 0 5px 15px; + grid-area: header; + border-bottom: thin solid #aaa; +} + +.footer { + grid-area: footer; + border-top: thin solid #aaa; + font-size: 85%; + +} + +.footer > p { + margin: 4px; +} + +#menu, +#menu_index { + grid-area: menu; + text-align: left; + overflow: auto; + padding: 0 23px 15px 15px; + border-right: thin solid #aaa; + min-width: 200px; +} + +#menu > a { + display: block; + margin-left: 10px; + font-size: 12px; +} + +#content, +#content_index { + grid-area: content; + padding: 0px 5px 15px 15px; + overflow: auto; +} + +label { + white-space: nowrap; +} + +label.checkBtn.disabled { + color: #606060; + background: #e0e0e0; + font-style: italic; +} + +label.checkBtn, input[type="text"] { + border: 1px solid grey; + border-radius: 4px; + box-shadow: 1px 1px inset; + padding: 1px 5px; +} + +label.checkBtn { + white-space: nowrap; + background: #ccddff; +} + +label.unchecked { + background: #eff8ff; + box-shadow: 1px 1px 1px; +} + +label.checkBtn:hover, label.unchecked:hover{ + box-shadow: 0 0 2px; +} + +label.disabled:hover { + box-shadow: 1px 1px inset; +} + +label.checkBtn > input { + display:none; +} + +.summaryTable { + width: 100%; +} + +table.summaryTable td { padding: 0 5px 0 5px; } + +.statHeader, .severityHeader { + font-weight: bold; +} + +.warning { + background-color: #ffffa7; +} + +.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; + position: relative; + margin: -10px; +} + +.linenos { + border-right: thin solid #aaa; + color: #d3d3d3; + padding-right: 6px; +} + +.id-filtered, .severity-filtered, .file-filtered, .tool-filtered, .text-filtered { + visibility: collapse; +} diff --git a/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/index.html b/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/index.html new file mode 100644 index 0000000..ff737ba --- /dev/null +++ b/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/index.html @@ -0,0 +1,94 @@ +<html> +<head> +<title>rootdir - scan-build results</title> +<link type="text/css" rel="stylesheet" href="scanview.css"/> +<script src="sorttable.js"></script> +<script language='javascript' type="text/javascript"> +function SetDisplay(RowClass, DisplayVal) +{ + var Rows = document.getElementsByTagName("tr"); + for ( var i = 0 ; i < Rows.length; ++i ) { + if (Rows[i].className == RowClass) { + Rows[i].style.display = DisplayVal; + } + } +} + +function CopyCheckedStateToCheckButtons(SummaryCheckButton) { + var Inputs = document.getElementsByTagName("input"); + for ( var i = 0 ; i < Inputs.length; ++i ) { + if (Inputs[i].type == "checkbox") { + if(Inputs[i] != SummaryCheckButton) { + Inputs[i].checked = SummaryCheckButton.checked; + Inputs[i].onclick(); + } + } + } +} + +function returnObjById( id ) { + if (document.getElementById) + var returnVar = document.getElementById(id); + else if (document.all) + var returnVar = document.all[id]; + else if (document.layers) + var returnVar = document.layers[id]; + return returnVar; +} + +var NumUnchecked = 0; + +function ToggleDisplay(CheckButton, ClassName) { + if (CheckButton.checked) { + SetDisplay(ClassName, ""); + if (--NumUnchecked == 0) { + returnObjById("AllBugsCheck").checked = true; + } + } + else { + SetDisplay(ClassName, "none"); + NumUnchecked++; + returnObjById("AllBugsCheck").checked = false; + } +} +</script> +<!-- SUMMARYENDHEAD --> +</head> +<body> +<h1>rootdir - scan-build results</h1> + +<table> +<tr><th>User:</th><td>root@2be86dfdc62c</td></tr> +<tr><th>Working Directory:</th><td>/rootdir</td></tr> +<tr><th>Command Line:</th><td>make -j 2</td></tr> +<tr><th>Clang Version:</th><td>clang version 17.0.6 (Fedora 17.0.6-2.fc39) +</td></tr> +<tr><th>Date:</th><td>Wed Feb 21 17:39:34 2024</td></tr> +</table> +<h2>Bug Summary</h2><table> +<thead><tr><td>Bug Type</td><td>Quantity</td><td class="sorttable_nosort">Display?</td></tr></thead> +<tr style="font-weight:bold"><td class="SUMM_DESC">All Bugs</td><td class="Q">1</td><td><center><input type="checkbox" id="AllBugsCheck" onClick="CopyCheckedStateToCheckButtons(this);" checked/></center></td></tr> +<tr><th>Logic error</th><th colspan=2></th></tr> +<tr><td class="SUMM_DESC">Cast from non-struct type to struct type</td><td class="Q">1</td><td><center><input type="checkbox" onClick="ToggleDisplay(this,'bt_logic_error_cast_from_non-struct_type_to_struct_type');" checked/></center></td></tr> +</table> +<h2>Reports</h2> + +<table class="sortable" style="table-layout:automatic"> +<thead><tr> + <td>Bug Group</td> + <td class="sorttable_sorted">Bug Type<span id="sorttable_sortfwdind"> ▾</span></td> + <td>File</td> + <td>Function/Method</td> + <td class="Q">Line</td> + <td class="Q">Path Length</td> + <td class="sorttable_nosort"></td> + <!-- REPORTBUGCOL --> +</tr></thead> +<tbody> +<tr class="bt_logic_error_cast_from_non-struct_type_to_struct_type"><td class="DESC">Logic error</td><td class="DESC">Cast from non-struct type to struct type</td><td>dropbox-command-client.c</td><td class="DESC">dropbox_command_client_force_reconnect</td><td class="Q">746</td><td class="Q">1</td><td><a href="report-1b9128.html#EndPath">View Report</a></td> +<!-- REPORTBUG id="report-1b9128.html" --> +</tr> +</tbody> +</table> + +</body></html> diff --git a/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/report-1b9128.html b/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/report-1b9128.html new file mode 100644 index 0000000..4d17cc4 --- /dev/null +++ b/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/report-1b9128.html @@ -0,0 +1,1553 @@ +<!doctype html> +<html> +<head> +<title>dropbox-command-client.c</title> + +<style type="text/css"> +body { color:#000000; background-color:#ffffff } +body { font-family:Helvetica, sans-serif; font-size:10pt } +h1 { font-size:14pt } +.FileName { margin-top: 5px; margin-bottom: 5px; display: inline; } +.FileNav { margin-left: 5px; margin-right: 5px; display: inline; } +.FileNav a { text-decoration:none; font-size: larger; } +.divider { margin-top: 30px; margin-bottom: 30px; height: 15px; } +.divider { background-color: gray; } +.code { border-collapse:collapse; width:100%; } +.code { font-family: "Monospace", monospace; font-size:10pt } +.code { line-height: 1.2em } +.comment { color: green; font-style: oblique } +.keyword { color: blue } +.string_literal { color: red } +.directive { color: darkmagenta } + +/* Macros and variables could have pop-up notes hidden by default. + - Macro pop-up: expansion of the macro + - Variable pop-up: value (table) of the variable */ +.macro_popup, .variable_popup { display: none; } + +/* Pop-up appears on mouse-hover event. */ +.macro:hover .macro_popup, .variable:hover .variable_popup { + display: block; + padding: 2px; + -webkit-border-radius:5px; + -webkit-box-shadow:1px 1px 7px #000; + border-radius:5px; + box-shadow:1px 1px 7px #000; + position: absolute; + top: -1em; + left:10em; + z-index: 1 +} + +.macro_popup { + border: 2px solid red; + background-color:#FFF0F0; + font-weight: normal; +} + +.variable_popup { + border: 2px solid blue; + background-color:#F0F0FF; + font-weight: bold; + font-family: Helvetica, sans-serif; + font-size: 9pt; +} + +/* Pop-up notes needs a relative position as a base where they pops up. */ +.macro, .variable { + background-color: PaleGoldenRod; + position: relative; +} +.macro { color: DarkMagenta; } + +#tooltiphint { + position: fixed; + width: 50em; + margin-left: -25em; + left: 50%; + padding: 10px; + border: 1px solid #b0b0b0; + border-radius: 2px; + box-shadow: 1px 1px 7px black; + background-color: #c0c0c0; + z-index: 2; +} + +.num { width:2.5em; padding-right:2ex; background-color:#eeeeee } +.num { text-align:right; font-size:8pt } +.num { color:#444444 } +.line { padding-left: 1ex; border-left: 3px solid #ccc } +.line { white-space: pre } +.msg { -webkit-box-shadow:1px 1px 7px #000 } +.msg { box-shadow:1px 1px 7px #000 } +.msg { -webkit-border-radius:5px } +.msg { border-radius:5px } +.msg { font-family:Helvetica, sans-serif; font-size:8pt } +.msg { float:left } +.msg { position:relative } +.msg { padding:0.25em 1ex 0.25em 1ex } +.msg { margin-top:10px; margin-bottom:10px } +.msg { font-weight:bold } +.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap } +.msgT { padding:0x; spacing:0x } +.msgEvent { background-color:#fff8b4; color:#000000 } +.msgControl { background-color:#bbbbbb; color:#000000 } +.msgNote { background-color:#ddeeff; color:#000000 } +.mrange { background-color:#dfddf3 } +.mrange { border-bottom:1px solid #6F9DBE } +.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; } +.PathIndex { -webkit-border-radius:8px } +.PathIndex { border-radius:8px } +.PathIndexEvent { background-color:#bfba87 } +.PathIndexControl { background-color:#8c8c8c } +.PathIndexPopUp { background-color: #879abc; } +.PathNav a { text-decoration:none; font-size: larger } +.CodeInsertionHint { font-weight: bold; background-color: #10dd10 } +.CodeRemovalHint { background-color:#de1010 } +.CodeRemovalHint { border-bottom:1px solid #6F9DBE } +.msg.selected{ background-color:orange !important; } + +table.simpletable { + padding: 5px; + font-size:12pt; + margin:20px; + border-collapse: collapse; border-spacing: 0px; +} +td.rowname { + text-align: right; + vertical-align: top; + font-weight: bold; + color:#444444; + padding-right:2ex; +} + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} +</style> +</head> +<body> +<!-- BUGDESC Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption --> + +<!-- BUGTYPE Cast from non-struct type to struct type --> + +<!-- BUGCATEGORY Logic error --> + +<!-- BUGFILE /rootdir/src/dropbox-command-client.c --> + +<!-- FILENAME dropbox-command-client.c --> + +<!-- FUNCTIONNAME dropbox_command_client_force_reconnect --> + +<!-- ISSUEHASHCONTENTOFLINEINCONTEXT 1b912817da7b46df76eac80b1f47b6bf --> + +<!-- BUGLINE 746 --> + +<!-- BUGCOLUMN 41 --> + +<!-- BUGPATHLENGTH 1 --> + +<!-- BUGMETAEND --> +<!-- REPORTHEADER --> +<h3>Bug Summary</h3> +<table class="simpletable"> +<tr><td class="rowname">File:</td><td>dropbox-command-client.c</td></tr> +<tr><td class="rowname">Warning:</td><td><a href="#EndPath">line 746, column 41</a><br />Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</td></tr> + +</table> +<!-- REPORTSUMMARYEXTRA --> +<h3>Annotated Source Code</h3> +<p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> + to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name dropbox-command-client.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/src -resource-dir /usr/bin/../lib/clang/17 -D HAVE_CONFIG_H -I . -I .. -I .. -I .. -D DATADIR="/usr/share" -D EMBLEMDIR="/usr/share/caja-dropbox/emblems" -I /usr/include/caja -I /usr/include/gtk-3.0 -I /usr/include/pango-1.0 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/cairo -I /usr/include/dbus-1.0 -I /usr/lib64/dbus-1.0/include -I /usr/include/atk-1.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/at-spi2-atk/2.0 -I /usr/include/cloudproviders -I /usr/include/at-spi-2.0 -I /usr/include/blkid -I /usr/include/gio-unix-2.0 -I /usr/include/libmount -I /usr/include/pixman-1 -I /usr/include/libxml2 -I /usr/include/fribidi -I /usr/include/sysprof-6 -I /usr/include/libpng16 -I /usr/include/glib-2.0 -I /usr/lib64/glib-2.0/include -I /usr/include/sysprof-6 -D G_DISABLE_ASSERT -D G_DISABLE_CHECKS -D PIC -internal-isystem /usr/bin/../lib/clang/17/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-parameter -Wno-unused-parameter -fdebug-compilation-dir=/rootdir/src -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-checker security.insecureAPI.strcpy -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2024-02-21-173934-5699-1 -x c dropbox-command-client.c +</div> +<div id='tooltiphint' hidden="true"> + <p>Keyboard shortcuts: </p> + <ul> + <li>Use 'j/k' keys for keyboard navigation</li> + <li>Use 'Shift+S' to show/hide relevant lines</li> + <li>Use '?' to toggle this window</li> + </ul> + <a href="#" onclick="toggleHelp(); return false;">Close</a> +</div> +<script type='text/javascript'> +var relevant_lines = {"1": {"746": 1}}; + +var filterCounterexample = function (hide) { + var tables = document.getElementsByClassName("code"); + for (var t=0; t<tables.length; t++) { + var table = tables[t]; + var file_id = table.getAttribute("data-fileid"); + var lines_in_fid = relevant_lines[file_id]; + if (!lines_in_fid) { + lines_in_fid = {}; + } + var lines = table.getElementsByClassName("codeline"); + for (var i=0; i<lines.length; i++) { + var el = lines[i]; + var lineNo = el.getAttribute("data-linenumber"); + if (!lines_in_fid[lineNo]) { + if (hide) { + el.setAttribute("hidden", ""); + } else { + el.removeAttribute("hidden"); + } + } + } + } +} + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // SHIFT + S + if (event.shiftKey && event.keyCode == 83) { + var checked = document.getElementsByName("showCounterexample")[0].checked; + filterCounterexample(!checked); + document.getElementsByName("showCounterexample")[0].click(); + } else { + return; + } + event.preventDefault(); +}, true); + +document.addEventListener("DOMContentLoaded", function() { + document.querySelector('input[name="showCounterexample"]').onchange= + function (event) { + filterCounterexample(this.checked); + }; +}); +</script> + +<form> + <input type="checkbox" name="showCounterexample" id="showCounterexample" /> + <label for="showCounterexample"> + Show only relevant lines + </label> + <input type="checkbox" name="showArrows" + id="showArrows" style="margin-left: 10px" /> + <label for="showArrows"> + Show control flow arrows + </label> +</form> + +<script type='text/javascript'> +// Return range of numbers from a range [lower, upper). +function range(lower, upper) { + var array = []; + for (var i = lower; i <= upper; ++i) { + array.push(i); + } + return array; +} + +var getRelatedArrowIndices = function(pathId) { + // HTML numeration of events is a bit different than it is in the path. + // Everything is rotated one step to the right, so the last element + // (error diagnostic) has index 0. + if (pathId == 0) { + // arrowIndices has at least 2 elements + pathId = arrowIndices.length - 1; + } + + return range(arrowIndices[pathId], arrowIndices[pathId - 1]); +} + +var highlightArrowsForSelectedEvent = function() { + const selectedNum = findNum(); + const arrowIndicesToHighlight = getRelatedArrowIndices(selectedNum); + arrowIndicesToHighlight.forEach((index) => { + var arrow = document.querySelector("#arrow" + index); + if(arrow) { + classListAdd(arrow, "selected") + } + }); +} + +var getAbsoluteBoundingRect = function(element) { + const relative = element.getBoundingClientRect(); + return { + left: relative.left + window.pageXOffset, + right: relative.right + window.pageXOffset, + top: relative.top + window.pageYOffset, + bottom: relative.bottom + window.pageYOffset, + height: relative.height, + width: relative.width + }; +} + +var drawArrow = function(index) { + // This function is based on the great answer from SO: + // https://stackoverflow.com/a/39575674/11582326 + var start = document.querySelector("#start" + index); + var end = document.querySelector("#end" + index); + var arrow = document.querySelector("#arrow" + index); + + var startRect = getAbsoluteBoundingRect(start); + var endRect = getAbsoluteBoundingRect(end); + + // It is an arrow from a token to itself, no need to visualize it. + if (startRect.top == endRect.top && + startRect.left == endRect.left) + return; + + // Each arrow is a very simple Bézier curve, with two nodes and + // two handles. So, we need to calculate four points in the window: + // * start node + var posStart = { x: 0, y: 0 }; + // * end node + var posEnd = { x: 0, y: 0 }; + // * handle for the start node + var startHandle = { x: 0, y: 0 }; + // * handle for the end node + var endHandle = { x: 0, y: 0 }; + // One can visualize it as follows: + // + // start handle + // / + // X"""_.-""""X + // .' \ + // / start node + // | + // | + // | end node + // \ / + // `->X + // X-' + // \ + // end handle + // + // NOTE: (0, 0) is the top left corner of the window. + + // We have 3 similar, but still different scenarios to cover: + // + // 1. Two tokens on different lines. + // -xxx + // / + // \ + // -> xxx + // In this situation, we draw arrow on the left curving to the left. + // 2. Two tokens on the same line, and the destination is on the right. + // ____ + // / \ + // / V + // xxx xxx + // In this situation, we draw arrow above curving upwards. + // 3. Two tokens on the same line, and the destination is on the left. + // xxx xxx + // ^ / + // \____/ + // In this situation, we draw arrow below curving downwards. + const onDifferentLines = startRect.top <= endRect.top - 5 || + startRect.top >= endRect.top + 5; + const leftToRight = startRect.left < endRect.left; + + // NOTE: various magic constants are chosen empirically for + // better positioning and look + if (onDifferentLines) { + // Case #1 + const topToBottom = startRect.top < endRect.top; + posStart.x = startRect.left - 1; + // We don't want to start it at the top left corner of the token, + // it doesn't feel like this is where the arrow comes from. + // For this reason, we start it in the middle of the left side + // of the token. + posStart.y = startRect.top + startRect.height / 2; + + // End node has arrow head and we give it a bit more space. + posEnd.x = endRect.left - 4; + posEnd.y = endRect.top; + + // Utility object with x and y offsets for handles. + var curvature = { + // We want bottom-to-top arrow to curve a bit more, so it doesn't + // overlap much with top-to-bottom curves (much more frequent). + x: topToBottom ? 15 : 25, + y: Math.min((posEnd.y - posStart.y) / 3, 10) + } + + // When destination is on the different line, we can make a + // curvier arrow because we have space for it. + // So, instead of using + // + // startHandle.x = posStart.x - curvature.x + // endHandle.x = posEnd.x - curvature.x + // + // We use the leftmost of these two values for both handles. + startHandle.x = Math.min(posStart.x, posEnd.x) - curvature.x; + endHandle.x = startHandle.x; + + // Curving downwards from the start node... + startHandle.y = posStart.y + curvature.y; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else if (leftToRight) { + // Case #2 + // Starting from the top right corner... + posStart.x = startRect.right - 1; + posStart.y = startRect.top; + + // ...and ending at the top left corner of the end token. + posEnd.x = endRect.left + 1; + posEnd.y = endRect.top - 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posEnd.x - posStart.x) / 3, 15), + y: 5 + } + + // Curving to the right... + startHandle.x = posStart.x + curvature.x; + // ... and upwards from the start node. + startHandle.y = posStart.y - curvature.y; + + // And to the left... + endHandle.x = posEnd.x - curvature.x; + // ... and upwards from the end node. + endHandle.y = posEnd.y - curvature.y; + + } else { + // Case #3 + // Starting from the bottom right corner... + posStart.x = startRect.right; + posStart.y = startRect.bottom; + + // ...and ending also at the bottom right corner, but of the end token. + posEnd.x = endRect.right - 1; + posEnd.y = endRect.bottom + 1; + + // Utility object with x and y offsets for handles. + var curvature = { + x: Math.min((posStart.x - posEnd.x) / 3, 15), + y: 5 + } + + // Curving to the left... + startHandle.x = posStart.x - curvature.x; + // ... and downwards from the start node. + startHandle.y = posStart.y + curvature.y; + + // And to the right... + endHandle.x = posEnd.x + curvature.x; + // ... and downwards from the end node. + endHandle.y = posEnd.y + curvature.y; + } + + // Put it all together into a path. + // More information on the format: + // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths + var pathStr = "M" + posStart.x + "," + posStart.y + " " + + "C" + startHandle.x + "," + startHandle.y + " " + + endHandle.x + "," + endHandle.y + " " + + posEnd.x + "," + posEnd.y; + + arrow.setAttribute("d", pathStr); +}; + +var drawArrows = function() { + const numOfArrows = document.querySelectorAll("path[id^=arrow]").length; + for (var i = 0; i < numOfArrows; ++i) { + drawArrow(i); + } +} + +var toggleArrows = function(event) { + const arrows = document.querySelector("#arrows"); + if (event.target.checked) { + arrows.setAttribute("visibility", "visible"); + } else { + arrows.setAttribute("visibility", "hidden"); + } +} + +window.addEventListener("resize", drawArrows); +document.addEventListener("DOMContentLoaded", function() { + // Whenever we show invocation, locations change, i.e. we + // need to redraw arrows. + document + .querySelector('input[id="showinvocation"]') + .addEventListener("click", drawArrows); + // Hiding irrelevant lines also should cause arrow rerender. + document + .querySelector('input[name="showCounterexample"]') + .addEventListener("change", drawArrows); + document + .querySelector('input[name="showArrows"]') + .addEventListener("change", toggleArrows); + drawArrows(); + // Default highlighting for the last event. + highlightArrowsForSelectedEvent(); +}); +</script> + +<script type='text/javascript'> +var digitMatcher = new RegExp("[0-9]+"); + +var querySelectorAllArray = function(selector) { + return Array.prototype.slice.call( + document.querySelectorAll(selector)); +} + +document.addEventListener("DOMContentLoaded", function() { + querySelectorAllArray(".PathNav > a").forEach( + function(currentValue, currentIndex) { + var hrefValue = currentValue.getAttribute("href"); + currentValue.onclick = function() { + scrollTo(document.querySelector(hrefValue)); + return false; + }; + }); +}); + +var findNum = function() { + var s = document.querySelector(".msg.selected"); + if (!s || s.id == "EndPath") { + return 0; + } + var out = parseInt(digitMatcher.exec(s.id)[0]); + return out; +}; + +var classListAdd = function(el, theClass) { + if(!el.className.baseVal) + el.className += " " + theClass; + else + el.className.baseVal += " " + theClass; +}; + +var classListRemove = function(el, theClass) { + var className = (!el.className.baseVal) ? + el.className : el.className.baseVal; + className = className.replace(" " + theClass, ""); + if(!el.className.baseVal) + el.className = className; + else + el.className.baseVal = className; +}; + +var scrollTo = function(el) { + querySelectorAllArray(".selected").forEach(function(s) { + classListRemove(s, "selected"); + }); + classListAdd(el, "selected"); + window.scrollBy(0, el.getBoundingClientRect().top - + (window.innerHeight / 2)); + highlightArrowsForSelectedEvent(); +}; + +var move = function(num, up, numItems) { + if (num == 1 && up || num == numItems - 1 && !up) { + return 0; + } else if (num == 0 && up) { + return numItems - 1; + } else if (num == 0 && !up) { + return 1 % numItems; + } + return up ? num - 1 : num + 1; +} + +var numToId = function(num) { + if (num == 0) { + return document.getElementById("EndPath") + } + return document.getElementById("Path" + num); +}; + +var navigateTo = function(up) { + var numItems = document.querySelectorAll( + ".line > .msgEvent, .line > .msgControl").length; + var currentSelected = findNum(); + var newSelected = move(currentSelected, up, numItems); + var newEl = numToId(newSelected, numItems); + + // Scroll element into center. + scrollTo(newEl); +}; + +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + // key 'j' + if (event.keyCode == 74) { + navigateTo(/*up=*/false); + // key 'k' + } else if (event.keyCode == 75) { + navigateTo(/*up=*/true); + } else { + return; + } + event.preventDefault(); +}, true); +</script> + +<script type='text/javascript'> + +var toggleHelp = function() { + var hint = document.querySelector("#tooltiphint"); + var attributeName = "hidden"; + if (hint.hasAttribute(attributeName)) { + hint.removeAttribute(attributeName); + } else { + hint.setAttribute("hidden", "true"); + } +}; +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; + } + if (event.key == "?") { + toggleHelp(); + } else { + return; + } + event.preventDefault(); +}); +</script> + +<style type="text/css"> + svg { + position:absolute; + top:0; + left:0; + height:100%; + width:100%; + pointer-events: none; + overflow: visible + } + .arrow { + stroke-opacity: 0.2; + stroke-width: 1; + marker-end: url(#arrowhead); + } + + .arrow.selected { + stroke-opacity: 0.6; + stroke-width: 2; + marker-end: url(#arrowheadSelected); + } + + .arrowhead { + orient: auto; + stroke: none; + opacity: 0.6; + fill: blue; + } +</style> +<svg xmlns="http://www.w3.org/2000/svg"> + <defs> + <marker id="arrowheadSelected" class="arrowhead" opacity="0.6" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + <marker id="arrowhead" class="arrowhead" opacity="0.2" + viewBox="0 0 10 10" refX="3" refY="5" + markerWidth="4" markerHeight="4"> + <path d="M 0 0 L 10 5 L 0 10 z" /> + </marker> + </defs> + <g id="arrows" fill="none" stroke="blue" visibility="hidden"> + + </g> +</svg> +<script type='text/javascript'> +const arrowIndices = [ 0,0 ] +</script> +<table class="code" data-fileid="1"> +<tr class="codeline" data-linenumber="1"><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="2"><td class="num" id="LN2">2</td><td class="line"> <span class='comment'>* Copyright 2008 Evenflow, Inc.</span></td></tr> +<tr class="codeline" data-linenumber="3"><td class="num" id="LN3">3</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="4"><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* dropbox-command-client.c</span></td></tr> +<tr class="codeline" data-linenumber="5"><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* Implements connection handling and C interface for the Dropbox command socket.</span></td></tr> +<tr class="codeline" data-linenumber="6"><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="7"><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* This file is part of caja-dropbox.</span></td></tr> +<tr class="codeline" data-linenumber="8"><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="9"><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* caja-dropbox is free software: you can redistribute it and/or modify</span></td></tr> +<tr class="codeline" data-linenumber="10"><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* it under the terms of the GNU General Public License as published by</span></td></tr> +<tr class="codeline" data-linenumber="11"><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* the Free Software Foundation, either version 3 of the License, or</span></td></tr> +<tr class="codeline" data-linenumber="12"><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* (at your option) any later version.</span></td></tr> +<tr class="codeline" data-linenumber="13"><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="14"><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* caja-dropbox is distributed in the hope that it will be useful,</span></td></tr> +<tr class="codeline" data-linenumber="15"><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>* but WITHOUT ANY WARRANTY; without even the implied warranty of</span></td></tr> +<tr class="codeline" data-linenumber="16"><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></td></tr> +<tr class="codeline" data-linenumber="17"><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* GNU General Public License for more details.</span></td></tr> +<tr class="codeline" data-linenumber="18"><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="19"><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* You should have received a copy of the GNU General Public License</span></td></tr> +<tr class="codeline" data-linenumber="20"><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span></td></tr> +<tr class="codeline" data-linenumber="21"><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>*</span></td></tr> +<tr class="codeline" data-linenumber="22"><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="23"><td class="num" id="LN23">23</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="24"><td class="num" id="LN24">24</td><td class="line"><span class='directive'>#include <sys/types.h></span></td></tr> +<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include <sys/socket.h></span></td></tr> +<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include <sys/un.h></span></td></tr> +<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include <<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h></span></td></tr> +<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include <unistd.h></span></td></tr> +<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include <fcntl.h></span></td></tr> +<tr class="codeline" data-linenumber="30"><td class="num" id="LN30">30</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="31"><td class="num" id="LN31">31</td><td class="line"><span class='directive'>#include <stdarg.h></span></td></tr> +<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include <string.h></span></td></tr> +<tr class="codeline" data-linenumber="33"><td class="num" id="LN33">33</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="34"><td class="num" id="LN34">34</td><td class="line"><span class='directive'>#include <glib.h></span></td></tr> +<tr class="codeline" data-linenumber="35"><td class="num" id="LN35">35</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="36"><td class="num" id="LN36">36</td><td class="line"><span class='directive'>#include "g-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="37"><td class="num" id="LN37">37</td><td class="line"><span class='directive'>#include "dropbox-client-util.h"</span></td></tr> +<tr class="codeline" data-linenumber="38"><td class="num" id="LN38">38</td><td class="line"><span class='directive'>#include "dropbox-command-client.h"</span></td></tr> +<tr class="codeline" data-linenumber="39"><td class="num" id="LN39">39</td><td class="line"><span class='directive'>#include "caja-dropbox.h"</span></td></tr> +<tr class="codeline" data-linenumber="40"><td class="num" id="LN40">40</td><td class="line"><span class='directive'>#include "caja-dropbox-hooks.h"</span></td></tr> +<tr class="codeline" data-linenumber="41"><td class="num" id="LN41">41</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="42"><td class="num" id="LN42">42</td><td class="line"><span class='comment'>/* TODO: make this asynchronous ;) */</span></td></tr> +<tr class="codeline" data-linenumber="43"><td class="num" id="LN43">43</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="44"><td class="num" id="LN44">44</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="45"><td class="num" id="LN45">45</td><td class="line"> <span class='comment'>this is a tiny hack, necessitated by the fact that</span></td></tr> +<tr class="codeline" data-linenumber="46"><td class="num" id="LN46">46</td><td class="line"> <span class='comment'>finish_file info command is in caja_dropbox,</span></td></tr> +<tr class="codeline" data-linenumber="47"><td class="num" id="LN47">47</td><td class="line"> <span class='comment'>this can be cleaned up once the file_info_command isn't a special</span></td></tr> +<tr class="codeline" data-linenumber="48"><td class="num" id="LN48">48</td><td class="line"> <span class='comment'>case anylonger</span></td></tr> +<tr class="codeline" data-linenumber="49"><td class="num" id="LN49">49</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="50"><td class="num" id="LN50">50</td><td class="line">gboolean caja_dropbox_finish_file_info_command(DropboxFileInfoCommandResponse *);</td></tr> +<tr class="codeline" data-linenumber="51"><td class="num" id="LN51">51</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="52"><td class="num" id="LN52">52</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="53"><td class="num" id="LN53">53</td><td class="line"> DropboxCommandClient *dcc;</td></tr> +<tr class="codeline" data-linenumber="54"><td class="num" id="LN54">54</td><td class="line"> guint connect_attempt;</td></tr> +<tr class="codeline" data-linenumber="55"><td class="num" id="LN55">55</td><td class="line">} ConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="56"><td class="num" id="LN56">56</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="57"><td class="num" id="LN57">57</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="58"><td class="num" id="LN58">58</td><td class="line"> DropboxCommandClientConnectionAttemptHook h;</td></tr> +<tr class="codeline" data-linenumber="59"><td class="num" id="LN59">59</td><td class="line"> gpointer ud;</td></tr> +<tr class="codeline" data-linenumber="60"><td class="num" id="LN60">60</td><td class="line">} DropboxCommandClientConnectionAttempt;</td></tr> +<tr class="codeline" data-linenumber="61"><td class="num" id="LN61">61</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="62"><td class="num" id="LN62">62</td><td class="line"><span class='keyword'>typedef</span> <span class='keyword'>struct</span> {</td></tr> +<tr class="codeline" data-linenumber="63"><td class="num" id="LN63">63</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="64"><td class="num" id="LN64">64</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="65"><td class="num" id="LN65">65</td><td class="line">} DropboxGeneralCommandResponse;</td></tr> +<tr class="codeline" data-linenumber="66"><td class="num" id="LN66">66</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="67"><td class="num" id="LN67">67</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="68"><td class="num" id="LN68">68</td><td class="line">on_connect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="69"><td class="num" id="LN69">69</td><td class="line"> g_hook_list_invoke(&(dcc->onconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="70"><td class="num" id="LN70">70</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="71"><td class="num" id="LN71">71</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="72"><td class="num" id="LN72">72</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="73"><td class="num" id="LN73">73</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="74"><td class="num" id="LN74">74</td><td class="line">on_disconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="75"><td class="num" id="LN75">75</td><td class="line"> g_hook_list_invoke(&(dcc->ondisconnect_hooklist), <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="76"><td class="num" id="LN76">76</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="77"><td class="num" id="LN77">77</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="78"><td class="num" id="LN78">78</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="79"><td class="num" id="LN79">79</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="80"><td class="num" id="LN80">80</td><td class="line">on_connection_attempt(ConnectionAttempt *ca) {</td></tr> +<tr class="codeline" data-linenumber="81"><td class="num" id="LN81">81</td><td class="line"> GList *ll;</td></tr> +<tr class="codeline" data-linenumber="82"><td class="num" id="LN82">82</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="83"><td class="num" id="LN83">83</td><td class="line"> <span class='keyword'>for</span> (ll = ca->dcc->ca_hooklist; ll != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; ll = <span class='macro'>g_list_next(ll)<span class='macro_popup'>((ll) ? (((GList *)(ll))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="84"><td class="num" id="LN84">84</td><td class="line"> DropboxCommandClientConnectionAttempt *dccca =</td></tr> +<tr class="codeline" data-linenumber="85"><td class="num" id="LN85">85</td><td class="line"> (DropboxCommandClientConnectionAttempt *)(ll->data);</td></tr> +<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca->h(ca->connect_attempt, dccca->ud);</td></tr> +<tr class="codeline" data-linenumber="87"><td class="num" id="LN87">87</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="88"><td class="num" id="LN88">88</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="89"><td class="num" id="LN89">89</td><td class="line"> g_free(ca);</td></tr> +<tr class="codeline" data-linenumber="90"><td class="num" id="LN90">90</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="91"><td class="num" id="LN91">91</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="92"><td class="num" id="LN92">92</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="93"><td class="num" id="LN93">93</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="94"><td class="num" id="LN94">94</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="95"><td class="num" id="LN95">95</td><td class="line">receive_args_until_done(GIOChannel *chan, GHashTable *return_table,</td></tr> +<tr class="codeline" data-linenumber="96"><td class="num" id="LN96">96</td><td class="line"> GError **err) {</td></tr> +<tr class="codeline" data-linenumber="97"><td class="num" id="LN97">97</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="98"><td class="num" id="LN98">98</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="99"><td class="num" id="LN99">99</td><td class="line"> guint numargs = 0;</td></tr> +<tr class="codeline" data-linenumber="100"><td class="num" id="LN100">100</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="101"><td class="num" id="LN101">101</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="102"><td class="num" id="LN102">102</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="103"><td class="num" id="LN103">103</td><td class="line"> gsize term_pos;</td></tr> +<tr class="codeline" data-linenumber="104"><td class="num" id="LN104">104</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="105"><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>/* if we are getting too many args, connection could be malicious */</span></td></tr> +<tr class="codeline" data-linenumber="106"><td class="num" id="LN106">106</td><td class="line"> <span class='keyword'>if</span> (numargs >= 20) {</td></tr> +<tr class="codeline" data-linenumber="107"><td class="num" id="LN107">107</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="108"><td class="num" id="LN108">108</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"malicious connection"</span>),</td></tr> +<tr class="codeline" data-linenumber="109"><td class="num" id="LN109">109</td><td class="line"> 0, <span class='string_literal'>"malicious connection"</span>);</td></tr> +<tr class="codeline" data-linenumber="110"><td class="num" id="LN110">110</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="111"><td class="num" id="LN111">111</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="112"><td class="num" id="LN112">112</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="113"><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>/* get the string */</span></td></tr> +<tr class="codeline" data-linenumber="114"><td class="num" id="LN114">114</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="115"><td class="num" id="LN115">115</td><td class="line"> &term_pos, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="116"><td class="num" id="LN116">116</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR || tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="117"><td class="num" id="LN117">117</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="118"><td class="num" id="LN118">118</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="119"><td class="num" id="LN119">119</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="120"><td class="num" id="LN120">120</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="121"><td class="num" id="LN121">121</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="122"><td class="num" id="LN122">122</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="123"><td class="num" id="LN123">123</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="124"><td class="num" id="LN124">124</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="125"><td class="num" id="LN125">125</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="126"><td class="num" id="LN126">126</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="127"><td class="num" id="LN127">127</td><td class="line"> 0, <span class='string_literal'>"connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="128"><td class="num" id="LN128">128</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="129"><td class="num" id="LN129">129</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="130"><td class="num" id="LN130">130</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="131"><td class="num" id="LN131">131</td><td class="line"> *(line+term_pos) = '\0';</td></tr> +<tr class="codeline" data-linenumber="132"><td class="num" id="LN132">132</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="133"><td class="num" id="LN133">133</td><td class="line"> <span class='keyword'>if</span> (strcmp(<span class='string_literal'>"done"</span>, line) == 0) {</td></tr> +<tr class="codeline" data-linenumber="134"><td class="num" id="LN134">134</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="135"><td class="num" id="LN135">135</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="136"><td class="num" id="LN136">136</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="137"><td class="num" id="LN137">137</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="138"><td class="num" id="LN138">138</td><td class="line"> gboolean parse_result;</td></tr> +<tr class="codeline" data-linenumber="139"><td class="num" id="LN139">139</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="140"><td class="num" id="LN140">140</td><td class="line"> parse_result = dropbox_client_util_command_parse_arg(line, return_table);</td></tr> +<tr class="codeline" data-linenumber="141"><td class="num" id="LN141">141</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="142"><td class="num" id="LN142">142</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="143"><td class="num" id="LN143">143</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span> == parse_result) {</td></tr> +<tr class="codeline" data-linenumber="144"><td class="num" id="LN144">144</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="145"><td class="num" id="LN145">145</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"parse error"</span>),</td></tr> +<tr class="codeline" data-linenumber="146"><td class="num" id="LN146">146</td><td class="line"> 0, <span class='string_literal'>"parse error"</span>);</td></tr> +<tr class="codeline" data-linenumber="147"><td class="num" id="LN147">147</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="148"><td class="num" id="LN148">148</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="149"><td class="num" id="LN149">149</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="150"><td class="num" id="LN150">150</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="151"><td class="num" id="LN151">151</td><td class="line"> numargs += 1;</td></tr> +<tr class="codeline" data-linenumber="152"><td class="num" id="LN152">152</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="153"><td class="num" id="LN153">153</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="154"><td class="num" id="LN154">154</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="155"><td class="num" id="LN155">155</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="156"><td class="num" id="LN156">156</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="157"><td class="num" id="LN157">157</td><td class="line"><span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="158"><td class="num" id="LN158">158</td><td class="line"> <span class='comment'>sends a command to the dropbox server</span></td></tr> +<tr class="codeline" data-linenumber="159"><td class="num" id="LN159">159</td><td class="line"> <span class='comment'>returns an hash of the return values</span></td></tr> +<tr class="codeline" data-linenumber="160"><td class="num" id="LN160">160</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="161"><td class="num" id="LN161">161</td><td class="line"> <span class='comment'>in theory, this should disconnection errors</span></td></tr> +<tr class="codeline" data-linenumber="162"><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>but it doesn't matter right now, any error is a sufficient</span></td></tr> +<tr class="codeline" data-linenumber="163"><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>condition to disconnect</span></td></tr> +<tr class="codeline" data-linenumber="164"><td class="num" id="LN164">164</td><td class="line"><span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="165"><td class="num" id="LN165">165</td><td class="line"><span class='keyword'>static</span> GHashTable *</td></tr> +<tr class="codeline" data-linenumber="166"><td class="num" id="LN166">166</td><td class="line">send_command_to_db(GIOChannel *chan, <span class='keyword'>const</span> gchar *command_name,</td></tr> +<tr class="codeline" data-linenumber="167"><td class="num" id="LN167">167</td><td class="line"> GHashTable *args, GError **err) {</td></tr> +<tr class="codeline" data-linenumber="168"><td class="num" id="LN168">168</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="169"><td class="num" id="LN169">169</td><td class="line"> GIOStatus iostat;</td></tr> +<tr class="codeline" data-linenumber="170"><td class="num" id="LN170">170</td><td class="line"> gsize bytes_trans;</td></tr> +<tr class="codeline" data-linenumber="171"><td class="num" id="LN171">171</td><td class="line"> gchar *line;</td></tr> +<tr class="codeline" data-linenumber="172"><td class="num" id="LN172">172</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="173"><td class="num" id="LN173">173</td><td class="line"> <span class='macro'>g_assert(chan != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="174"><td class="num" id="LN174">174</td><td class="line"> <span class='macro'>g_assert(command_name != NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="175"><td class="num" id="LN175">175</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="176"><td class="num" id="LN176">176</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="177"><td class="num" id="LN177">177</td><td class="line"><span class='directive'>#define WRITE_OR_DIE_SANI(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="178"><td class="num" id="LN178">178</td><td class="line"> <span class='directive'>gchar *sani_s; \</span></td></tr> +<tr class="codeline" data-linenumber="179"><td class="num" id="LN179">179</td><td class="line"> <span class='directive'>sani_s = dropbox_client_util_sanitize(s); \</span></td></tr> +<tr class="codeline" data-linenumber="180"><td class="num" id="LN180">180</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="182"><td class="num" id="LN182">182</td><td class="line"> <span class='directive'>g_free(sani_s); \</span></td></tr> +<tr class="codeline" data-linenumber="183"><td class="num" id="LN183">183</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="184"><td class="num" id="LN184">184</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="185"><td class="num" id="LN185">185</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="186"><td class="num" id="LN186">186</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="187"><td class="num" id="LN187">187</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="188"><td class="num" id="LN188">188</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="189"><td class="num" id="LN189">189</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="190"><td class="num" id="LN190">190</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="191"><td class="num" id="LN191">191</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="192"><td class="num" id="LN192">192</td><td class="line"><span class='directive'>#define WRITE_OR_DIE(s,l) { \</span></td></tr> +<tr class="codeline" data-linenumber="193"><td class="num" id="LN193">193</td><td class="line"> <span class='directive'>iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span></td></tr> +<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="195"><td class="num" id="LN195">195</td><td class="line"> <span class='directive'>if (iostat == G_IO_STATUS_ERROR || \</span></td></tr> +<tr class="codeline" data-linenumber="196"><td class="num" id="LN196">196</td><td class="line"> <span class='directive'>iostat == G_IO_STATUS_AGAIN) { \</span></td></tr> +<tr class="codeline" data-linenumber="197"><td class="num" id="LN197">197</td><td class="line"> <span class='directive'>if (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) { \</span></td></tr> +<tr class="codeline" data-linenumber="198"><td class="num" id="LN198">198</td><td class="line"> <span class='directive'>g_propagate_error(err, tmp_error); \</span></td></tr> +<tr class="codeline" data-linenumber="199"><td class="num" id="LN199">199</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="200"><td class="num" id="LN200">200</td><td class="line"> <span class='directive'>return <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; \</span></td></tr> +<tr class="codeline" data-linenumber="201"><td class="num" id="LN201">201</td><td class="line"> <span class='directive'>} \</span></td></tr> +<tr class="codeline" data-linenumber="202"><td class="num" id="LN202">202</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="203"><td class="num" id="LN203">203</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="204"><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* send command to server */</span></td></tr> +<tr class="codeline" data-linenumber="205"><td class="num" id="LN205">205</td><td class="line"> WRITE_OR_DIE_SANI(command_name, -1);</td></tr> +<tr class="codeline" data-linenumber="206"><td class="num" id="LN206">206</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="207"><td class="num" id="LN207">207</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="208"><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span> (args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="209"><td class="num" id="LN209">209</td><td class="line"> GList *keys, *li;</td></tr> +<tr class="codeline" data-linenumber="210"><td class="num" id="LN210">210</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="211"><td class="num" id="LN211">211</td><td class="line"> keys = g_hash_table_get_keys(args);</td></tr> +<tr class="codeline" data-linenumber="212"><td class="num" id="LN212">212</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="213"><td class="num" id="LN213">213</td><td class="line"> <span class='keyword'>for</span> (li = keys; li != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; li = <span class='macro'>g_list_next(li)<span class='macro_popup'>((li) ? (((GList *)(li))->next) : ((void*)0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="214"><td class="num" id="LN214">214</td><td class="line"> <span class='keyword'>int</span> i;</td></tr> +<tr class="codeline" data-linenumber="215"><td class="num" id="LN215">215</td><td class="line"> gchar **value;</td></tr> +<tr class="codeline" data-linenumber="216"><td class="num" id="LN216">216</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="217"><td class="num" id="LN217">217</td><td class="line"> WRITE_OR_DIE_SANI((gchar *) li->data, -1);</td></tr> +<tr class="codeline" data-linenumber="218"><td class="num" id="LN218">218</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="219"><td class="num" id="LN219">219</td><td class="line"> value = g_hash_table_lookup(args, li->data);</td></tr> +<tr class="codeline" data-linenumber="220"><td class="num" id="LN220">220</td><td class="line"> <span class='keyword'>for</span> (i = 0; value[i] != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>; i++) {</td></tr> +<tr class="codeline" data-linenumber="221"><td class="num" id="LN221">221</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\t"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="222"><td class="num" id="LN222">222</td><td class="line"> WRITE_OR_DIE_SANI(value[i], -1);</td></tr> +<tr class="codeline" data-linenumber="223"><td class="num" id="LN223">223</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="224"><td class="num" id="LN224">224</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="225"><td class="num" id="LN225">225</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="226"><td class="num" id="LN226">226</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="227"><td class="num" id="LN227">227</td><td class="line"> g_list_free(keys);</td></tr> +<tr class="codeline" data-linenumber="228"><td class="num" id="LN228">228</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="229"><td class="num" id="LN229">229</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="230"><td class="num" id="LN230">230</td><td class="line"> WRITE_OR_DIE(<span class='string_literal'>"done\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="231"><td class="num" id="LN231">231</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="232"><td class="num" id="LN232">232</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE</span></td></tr> +<tr class="codeline" data-linenumber="233"><td class="num" id="LN233">233</td><td class="line"><span class='directive'>#undef WRITE_OR_DIE_SANI</span></td></tr> +<tr class="codeline" data-linenumber="234"><td class="num" id="LN234">234</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="235"><td class="num" id="LN235">235</td><td class="line"> g_io_channel_flush(chan, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="236"><td class="num" id="LN236">236</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="237"><td class="num" id="LN237">237</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="238"><td class="num" id="LN238">238</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="239"><td class="num" id="LN239">239</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="240"><td class="num" id="LN240">240</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="241"><td class="num" id="LN241">241</td><td class="line"> <span class='comment'>/* now we have to read the data */</span></td></tr> +<tr class="codeline" data-linenumber="242"><td class="num" id="LN242">242</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="243"><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="244"><td class="num" id="LN244">244</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="245"><td class="num" id="LN245">245</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="246"><td class="num" id="LN246">246</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="247"><td class="num" id="LN247">247</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="248"><td class="num" id="LN248">248</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="249"><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="250"><td class="num" id="LN250">250</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="251"><td class="num" id="LN251">251</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="252"><td class="num" id="LN252">252</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="253"><td class="num" id="LN253">253</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="254"><td class="num" id="LN254">254</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="255"><td class="num" id="LN255">255</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="256"><td class="num" id="LN256">256</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="257"><td class="num" id="LN257">257</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="258"><td class="num" id="LN258">258</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="259"><td class="num" id="LN259">259</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="260"><td class="num" id="LN260">260</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="261"><td class="num" id="LN261">261</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="262"><td class="num" id="LN262">262</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="263"><td class="num" id="LN263">263</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="264"><td class="num" id="LN264">264</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="265"><td class="num" id="LN265">265</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="266"><td class="num" id="LN266">266</td><td class="line"> <span class='comment'>/* if the response was okay */</span></td></tr> +<tr class="codeline" data-linenumber="267"><td class="num" id="LN267">267</td><td class="line"> <span class='keyword'>if</span> (strncmp(line, <span class='string_literal'>"ok\n"</span>, 3) == 0) {</td></tr> +<tr class="codeline" data-linenumber="268"><td class="num" id="LN268">268</td><td class="line"> GHashTable *return_table =</td></tr> +<tr class="codeline" data-linenumber="269"><td class="num" id="LN269">269</td><td class="line"> g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="270"><td class="num" id="LN270">270</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="271"><td class="num" id="LN271">271</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="272"><td class="num" id="LN272">272</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="273"><td class="num" id="LN273">273</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="274"><td class="num" id="LN274">274</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="275"><td class="num" id="LN275">275</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="276"><td class="num" id="LN276">276</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="277"><td class="num" id="LN277">277</td><td class="line"> receive_args_until_done(chan, return_table, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="278"><td class="num" id="LN278">278</td><td class="line"> <span class='keyword'>if</span> (tmp_error != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="279"><td class="num" id="LN279">279</td><td class="line"> g_hash_table_destroy(return_table);</td></tr> +<tr class="codeline" data-linenumber="280"><td class="num" id="LN280">280</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="281"><td class="num" id="LN281">281</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="282"><td class="num" id="LN282">282</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="283"><td class="num" id="LN283">283</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="284"><td class="num" id="LN284">284</td><td class="line"> <span class='keyword'>return</span> return_table;</td></tr> +<tr class="codeline" data-linenumber="285"><td class="num" id="LN285">285</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="286"><td class="num" id="LN286">286</td><td class="line"> <span class='comment'>/* otherwise */</span></td></tr> +<tr class="codeline" data-linenumber="287"><td class="num" id="LN287">287</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="288"><td class="num" id="LN288">288</td><td class="line"> <span class='comment'>/* read errors off until we get done */</span></td></tr> +<tr class="codeline" data-linenumber="289"><td class="num" id="LN289">289</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="290"><td class="num" id="LN290">290</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="291"><td class="num" id="LN291">291</td><td class="line"> line = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="292"><td class="num" id="LN292">292</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="293"><td class="num" id="LN293">293</td><td class="line"> <span class='comment'>/* clear string */</span></td></tr> +<tr class="codeline" data-linenumber="294"><td class="num" id="LN294">294</td><td class="line"> iostat = g_io_channel_read_line(chan, &line, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>,</td></tr> +<tr class="codeline" data-linenumber="295"><td class="num" id="LN295">295</td><td class="line"> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="296"><td class="num" id="LN296">296</td><td class="line"> <span class='keyword'>if</span> (iostat == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="297"><td class="num" id="LN297">297</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="298"><td class="num" id="LN298">298</td><td class="line"> g_propagate_error(err, tmp_error);</td></tr> +<tr class="codeline" data-linenumber="299"><td class="num" id="LN299">299</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="300"><td class="num" id="LN300">300</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="301"><td class="num" id="LN301">301</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_AGAIN) {</td></tr> +<tr class="codeline" data-linenumber="302"><td class="num" id="LN302">302</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="303"><td class="num" id="LN303">303</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="304"><td class="num" id="LN304">304</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection timed out"</span>),</td></tr> +<tr class="codeline" data-linenumber="305"><td class="num" id="LN305">305</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="306"><td class="num" id="LN306">306</td><td class="line"> <span class='string_literal'>"dropbox command connection timed out"</span>);</td></tr> +<tr class="codeline" data-linenumber="307"><td class="num" id="LN307">307</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="308"><td class="num" id="LN308">308</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="309"><td class="num" id="LN309">309</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="310"><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (iostat == G_IO_STATUS_EOF) {</td></tr> +<tr class="codeline" data-linenumber="311"><td class="num" id="LN311">311</td><td class="line"> <span class='macro'>g_assert(line == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="312"><td class="num" id="LN312">312</td><td class="line"> g_set_error(err,</td></tr> +<tr class="codeline" data-linenumber="313"><td class="num" id="LN313">313</td><td class="line"> g_quark_from_static_string(<span class='string_literal'>"dropbox command connection closed"</span>),</td></tr> +<tr class="codeline" data-linenumber="314"><td class="num" id="LN314">314</td><td class="line"> 0,</td></tr> +<tr class="codeline" data-linenumber="315"><td class="num" id="LN315">315</td><td class="line"> <span class='string_literal'>"dropbox command connection closed"</span>);</td></tr> +<tr class="codeline" data-linenumber="316"><td class="num" id="LN316">316</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="317"><td class="num" id="LN317">317</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="318"><td class="num" id="LN318">318</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="319"><td class="num" id="LN319">319</td><td class="line"> <span class='comment'>/* we got our line */</span></td></tr> +<tr class="codeline" data-linenumber="320"><td class="num" id="LN320">320</td><td class="line"> } <span class='keyword'>while</span> (strncmp(line, <span class='string_literal'>"done\n"</span>, 5) != 0);</td></tr> +<tr class="codeline" data-linenumber="321"><td class="num" id="LN321">321</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="322"><td class="num" id="LN322">322</td><td class="line"> g_free(line);</td></tr> +<tr class="codeline" data-linenumber="323"><td class="num" id="LN323">323</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="324"><td class="num" id="LN324">324</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="325"><td class="num" id="LN325">325</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="326"><td class="num" id="LN326">326</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="327"><td class="num" id="LN327">327</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="328"><td class="num" id="LN328">328</td><td class="line">do_file_info_command(GIOChannel *chan, DropboxFileInfoCommand *dfic, GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="329"><td class="num" id="LN329">329</td><td class="line"> <span class='comment'>/* we need to send two requests to dropbox:</span></td></tr> +<tr class="codeline" data-linenumber="330"><td class="num" id="LN330">330</td><td class="line"> <span class='comment'>file status, and folder_tags */</span></td></tr> +<tr class="codeline" data-linenumber="331"><td class="num" id="LN331">331</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="332"><td class="num" id="LN332">332</td><td class="line"> DropboxFileInfoCommandResponse *dficr;</td></tr> +<tr class="codeline" data-linenumber="333"><td class="num" id="LN333">333</td><td class="line"> GHashTable *file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *args, *folder_tag_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, *emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="334"><td class="num" id="LN334">334</td><td class="line"> gchar *filename = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="335"><td class="num" id="LN335">335</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="336"><td class="num" id="LN336">336</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="337"><td class="num" id="LN337">337</td><td class="line"> gchar *filename_un, *uri;</td></tr> +<tr class="codeline" data-linenumber="338"><td class="num" id="LN338">338</td><td class="line"> uri = caja_file_info_get_uri(dfic->file);</td></tr> +<tr class="codeline" data-linenumber="339"><td class="num" id="LN339">339</td><td class="line"> filename_un = uri ? g_filename_from_uri(uri, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>): <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="340"><td class="num" id="LN340">340</td><td class="line"> g_free(uri);</td></tr> +<tr class="codeline" data-linenumber="341"><td class="num" id="LN341">341</td><td class="line"> <span class='keyword'>if</span> (filename_un) {</td></tr> +<tr class="codeline" data-linenumber="342"><td class="num" id="LN342">342</td><td class="line"> filename = g_filename_to_utf8(filename_un, -1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="343"><td class="num" id="LN343">343</td><td class="line"> g_free(filename_un);</td></tr> +<tr class="codeline" data-linenumber="344"><td class="num" id="LN344">344</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="345"><td class="num" id="LN345">345</td><td class="line"> <span class='comment'>/* oooh, filename wasn't correctly encoded. mark as */</span></td></tr> +<tr class="codeline" data-linenumber="346"><td class="num" id="LN346">346</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"file wasn't correctly encoded %s"</span>, filename_un)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="347"><td class="num" id="LN347">347</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="348"><td class="num" id="LN348">348</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="349"><td class="num" id="LN349">349</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="350"><td class="num" id="LN350">350</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="351"><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>if</span> (filename == <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="352"><td class="num" id="LN352">352</td><td class="line"> <span class='comment'>/* We couldn't get the filename. Just return empty. */</span></td></tr> +<tr class="codeline" data-linenumber="353"><td class="num" id="LN353">353</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="354"><td class="num" id="LN354">354</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="355"><td class="num" id="LN355">355</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="356"><td class="num" id="LN356">356</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="357"><td class="num" id="LN357">357</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="358"><td class="num" id="LN358">358</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="359"><td class="num" id="LN359">359</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="360"><td class="num" id="LN360">360</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="361"><td class="num" id="LN361">361</td><td class="line"> gchar **path_arg;</td></tr> +<tr class="codeline" data-linenumber="362"><td class="num" id="LN362">362</td><td class="line"> path_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="363"><td class="num" id="LN363">363</td><td class="line"> path_arg[0] = <span class='macro'>g_strdup(filename)<span class='macro_popup'>g_strdup_inline (filename)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="364"><td class="num" id="LN364">364</td><td class="line"> path_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="365"><td class="num" id="LN365">365</td><td class="line"> g_hash_table_insert(args, <span class='macro'>g_strdup(<span class='string_literal'>"path"</span>)<span class='macro_popup'>g_strdup_inline ("path")</span></span>, path_arg);</td></tr> +<tr class="codeline" data-linenumber="366"><td class="num" id="LN366">366</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="367"><td class="num" id="LN367">367</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="368"><td class="num" id="LN368">368</td><td class="line"> emblems_response = send_command_to_db(chan, <span class='string_literal'>"get_emblems"</span>, args, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="369"><td class="num" id="LN369">369</td><td class="line"> <span class='keyword'>if</span> (emblems_response) {</td></tr> +<tr class="codeline" data-linenumber="370"><td class="num" id="LN370">370</td><td class="line"> <span class='comment'>/* Don't need to do the other calls. */</span></td></tr> +<tr class="codeline" data-linenumber="371"><td class="num" id="LN371">371</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="372"><td class="num" id="LN372">372</td><td class="line"> <span class='keyword'>goto</span> exit;</td></tr> +<tr class="codeline" data-linenumber="373"><td class="num" id="LN373">373</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="374"><td class="num" id="LN374">374</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="375"><td class="num" id="LN375">375</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="376"><td class="num" id="LN376">376</td><td class="line"> file_status_response = send_command_to_db(chan, <span class='string_literal'>"icon_overlay_file_status"</span>,</td></tr> +<tr class="codeline" data-linenumber="377"><td class="num" id="LN377">377</td><td class="line"> args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="378"><td class="num" id="LN378">378</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="379"><td class="num" id="LN379">379</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="380"><td class="num" id="LN380">380</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="381"><td class="num" id="LN381">381</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="382"><td class="num" id="LN382">382</td><td class="line"> <span class='macro'>g_assert(file_status_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="383"><td class="num" id="LN383">383</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="384"><td class="num" id="LN384">384</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="385"><td class="num" id="LN385">385</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="386"><td class="num" id="LN386">386</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="387"><td class="num" id="LN387">387</td><td class="line"> <span class='keyword'>if</span> (caja_file_info_is_directory(dfic->file)) {</td></tr> +<tr class="codeline" data-linenumber="388"><td class="num" id="LN388">388</td><td class="line"> args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="389"><td class="num" id="LN389">389</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="390"><td class="num" id="LN390">390</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="391"><td class="num" id="LN391">391</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="392"><td class="num" id="LN392">392</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="393"><td class="num" id="LN393">393</td><td class="line"> gchar **paths_arg;</td></tr> +<tr class="codeline" data-linenumber="394"><td class="num" id="LN394">394</td><td class="line"> paths_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="395"><td class="num" id="LN395">395</td><td class="line"> paths_arg[0] = <span class='macro'>g_strdup(filename)<span class='macro_popup'>g_strdup_inline (filename)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="396"><td class="num" id="LN396">396</td><td class="line"> paths_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="397"><td class="num" id="LN397">397</td><td class="line"> g_hash_table_insert(args, <span class='macro'>g_strdup(<span class='string_literal'>"path"</span>)<span class='macro_popup'>g_strdup_inline ("path")</span></span>, paths_arg);</td></tr> +<tr class="codeline" data-linenumber="398"><td class="num" id="LN398">398</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="399"><td class="num" id="LN399">399</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="400"><td class="num" id="LN400">400</td><td class="line"> folder_tag_response =</td></tr> +<tr class="codeline" data-linenumber="401"><td class="num" id="LN401">401</td><td class="line"> send_command_to_db(chan, <span class='string_literal'>"get_folder_tag"</span>, args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="402"><td class="num" id="LN402">402</td><td class="line"> g_hash_table_unref(args);</td></tr> +<tr class="codeline" data-linenumber="403"><td class="num" id="LN403">403</td><td class="line"> args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="404"><td class="num" id="LN404">404</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="405"><td class="num" id="LN405">405</td><td class="line"> <span class='keyword'>if</span> (file_status_response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>)</td></tr> +<tr class="codeline" data-linenumber="406"><td class="num" id="LN406">406</td><td class="line"> g_hash_table_destroy(file_status_response);</td></tr> +<tr class="codeline" data-linenumber="407"><td class="num" id="LN407">407</td><td class="line"> <span class='macro'>g_assert(folder_tag_response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="408"><td class="num" id="LN408">408</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="409"><td class="num" id="LN409">409</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="410"><td class="num" id="LN410">410</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="411"><td class="num" id="LN411">411</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="412"><td class="num" id="LN412">412</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="413"><td class="num" id="LN413">413</td><td class="line"> <span class='comment'>/* great server responded perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="414"><td class="num" id="LN414">414</td><td class="line"> <span class='comment'>now let's get this request done,</span></td></tr> +<tr class="codeline" data-linenumber="415"><td class="num" id="LN415">415</td><td class="line"> <span class='comment'>...in the glib main loop */</span></td></tr> +<tr class="codeline" data-linenumber="416"><td class="num" id="LN416">416</td><td class="line">exit:</td></tr> +<tr class="codeline" data-linenumber="417"><td class="num" id="LN417">417</td><td class="line"> dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="418"><td class="num" id="LN418">418</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr->folder_tag_response = folder_tag_response;</td></tr> +<tr class="codeline" data-linenumber="420"><td class="num" id="LN420">420</td><td class="line"> dficr->file_status_response = file_status_response;</td></tr> +<tr class="codeline" data-linenumber="421"><td class="num" id="LN421">421</td><td class="line"> dficr->emblems_response = emblems_response;</td></tr> +<tr class="codeline" data-linenumber="422"><td class="num" id="LN422">422</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="423"><td class="num" id="LN423">423</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="424"><td class="num" id="LN424">424</td><td class="line"> g_free(filename);</td></tr> +<tr class="codeline" data-linenumber="425"><td class="num" id="LN425">425</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="426"><td class="num" id="LN426">426</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="427"><td class="num" id="LN427">427</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="428"><td class="num" id="LN428">428</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="429"><td class="num" id="LN429">429</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="430"><td class="num" id="LN430">430</td><td class="line">finish_general_command(DropboxGeneralCommandResponse *dgcr) {</td></tr> +<tr class="codeline" data-linenumber="431"><td class="num" id="LN431">431</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->handler != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="432"><td class="num" id="LN432">432</td><td class="line"> dgcr->dgc->handler(dgcr->response, dgcr->dgc->handler_ud);</td></tr> +<tr class="codeline" data-linenumber="433"><td class="num" id="LN433">433</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="434"><td class="num" id="LN434">434</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="435"><td class="num" id="LN435">435</td><td class="line"> <span class='keyword'>if</span> (dgcr->response != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="436"><td class="num" id="LN436">436</td><td class="line"> g_hash_table_unref(dgcr->response);</td></tr> +<tr class="codeline" data-linenumber="437"><td class="num" id="LN437">437</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="438"><td class="num" id="LN438">438</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="439"><td class="num" id="LN439">439</td><td class="line"> g_free(dgcr->dgc->command_name);</td></tr> +<tr class="codeline" data-linenumber="440"><td class="num" id="LN440">440</td><td class="line"> <span class='keyword'>if</span> (dgcr->dgc->command_args != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="441"><td class="num" id="LN441">441</td><td class="line"> g_hash_table_unref(dgcr->dgc->command_args);</td></tr> +<tr class="codeline" data-linenumber="442"><td class="num" id="LN442">442</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="443"><td class="num" id="LN443">443</td><td class="line"> g_free(dgcr->dgc);</td></tr> +<tr class="codeline" data-linenumber="444"><td class="num" id="LN444">444</td><td class="line"> g_free(dgcr);</td></tr> +<tr class="codeline" data-linenumber="445"><td class="num" id="LN445">445</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="446"><td class="num" id="LN446">446</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="447"><td class="num" id="LN447">447</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="448"><td class="num" id="LN448">448</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="449"><td class="num" id="LN449">449</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="450"><td class="num" id="LN450">450</td><td class="line">do_general_command(GIOChannel *chan, DropboxGeneralCommand *dcac,</td></tr> +<tr class="codeline" data-linenumber="451"><td class="num" id="LN451">451</td><td class="line"> GError **gerr) {</td></tr> +<tr class="codeline" data-linenumber="452"><td class="num" id="LN452">452</td><td class="line"> GError *tmp_gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="453"><td class="num" id="LN453">453</td><td class="line"> GHashTable *response;</td></tr> +<tr class="codeline" data-linenumber="454"><td class="num" id="LN454">454</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="455"><td class="num" id="LN455">455</td><td class="line"> <span class='comment'>/* send status command to server */</span></td></tr> +<tr class="codeline" data-linenumber="456"><td class="num" id="LN456">456</td><td class="line"> response = send_command_to_db(chan, dcac->command_name,</td></tr> +<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac->command_args, &tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="458"><td class="num" id="LN458">458</td><td class="line"> <span class='keyword'>if</span> (tmp_gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="459"><td class="num" id="LN459">459</td><td class="line"> <span class='macro'>g_assert(response == NULL)<span class='macro_popup'>do { (void) 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="460"><td class="num" id="LN460">460</td><td class="line"> g_propagate_error(gerr, tmp_gerr);</td></tr> +<tr class="codeline" data-linenumber="461"><td class="num" id="LN461">461</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="462"><td class="num" id="LN462">462</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="463"><td class="num" id="LN463">463</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="464"><td class="num" id="LN464">464</td><td class="line"> <span class='comment'>/* great, the server did the command perfectly,</span></td></tr> +<tr class="codeline" data-linenumber="465"><td class="num" id="LN465">465</td><td class="line"> <span class='comment'>now call the handler with the response */</span></td></tr> +<tr class="codeline" data-linenumber="466"><td class="num" id="LN466">466</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="467"><td class="num" id="LN467">467</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="468"><td class="num" id="LN468">468</td><td class="line"> dgcr->dgc = dcac;</td></tr> +<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr->response = response;</td></tr> +<tr class="codeline" data-linenumber="470"><td class="num" id="LN470">470</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="471"><td class="num" id="LN471">471</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="472"><td class="num" id="LN472">472</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="473"><td class="num" id="LN473">473</td><td class="line"> <span class='keyword'>return</span>;</td></tr> +<tr class="codeline" data-linenumber="474"><td class="num" id="LN474">474</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="475"><td class="num" id="LN475">475</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="476"><td class="num" id="LN476">476</td><td class="line"><span class='keyword'>static</span> gboolean</td></tr> +<tr class="codeline" data-linenumber="477"><td class="num" id="LN477">477</td><td class="line">check_connection(GIOChannel *chan) {</td></tr> +<tr class="codeline" data-linenumber="478"><td class="num" id="LN478">478</td><td class="line"> gchar fake_buf[4096];</td></tr> +<tr class="codeline" data-linenumber="479"><td class="num" id="LN479">479</td><td class="line"> gsize bytes_read;</td></tr> +<tr class="codeline" data-linenumber="480"><td class="num" id="LN480">480</td><td class="line"> GError *tmp_error = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="481"><td class="num" id="LN481">481</td><td class="line"> GIOFlags flags;</td></tr> +<tr class="codeline" data-linenumber="482"><td class="num" id="LN482">482</td><td class="line"> GIOStatus ret, iostat;</td></tr> +<tr class="codeline" data-linenumber="483"><td class="num" id="LN483">483</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="484"><td class="num" id="LN484">484</td><td class="line"> flags = g_io_channel_get_flags(chan);</td></tr> +<tr class="codeline" data-linenumber="485"><td class="num" id="LN485">485</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="486"><td class="num" id="LN486">486</td><td class="line"> <span class='comment'>/* set non-blocking */</span></td></tr> +<tr class="codeline" data-linenumber="487"><td class="num" id="LN487">487</td><td class="line"> ret = g_io_channel_set_flags(chan, flags | G_IO_FLAG_NONBLOCK, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="488"><td class="num" id="LN488">488</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="489"><td class="num" id="LN489">489</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="490"><td class="num" id="LN490">490</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="491"><td class="num" id="LN491">491</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="492"><td class="num" id="LN492">492</td><td class="line"> iostat = g_io_channel_read_chars(chan, fake_buf,</td></tr> +<tr class="codeline" data-linenumber="493"><td class="num" id="LN493">493</td><td class="line"> <span class='keyword'>sizeof</span>(fake_buf),</td></tr> +<tr class="codeline" data-linenumber="494"><td class="num" id="LN494">494</td><td class="line"> &bytes_read, &tmp_error);</td></tr> +<tr class="codeline" data-linenumber="495"><td class="num" id="LN495">495</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="496"><td class="num" id="LN496">496</td><td class="line"> ret = g_io_channel_set_flags(chan, flags, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="497"><td class="num" id="LN497">497</td><td class="line"> <span class='keyword'>if</span> (ret == G_IO_STATUS_ERROR) {</td></tr> +<tr class="codeline" data-linenumber="498"><td class="num" id="LN498">498</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="499"><td class="num" id="LN499">499</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="500"><td class="num" id="LN500">500</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="501"><td class="num" id="LN501">501</td><td class="line"> <span class='comment'>/* this makes us disconnect from bad servers</span></td></tr> +<tr class="codeline" data-linenumber="502"><td class="num" id="LN502">502</td><td class="line"> <span class='comment'>(those that send us information without us asking for it) */</span></td></tr> +<tr class="codeline" data-linenumber="503"><td class="num" id="LN503">503</td><td class="line"> <span class='keyword'>return</span> iostat == G_IO_STATUS_AGAIN;</td></tr> +<tr class="codeline" data-linenumber="504"><td class="num" id="LN504">504</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="505"><td class="num" id="LN505">505</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="506"><td class="num" id="LN506">506</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="507"><td class="num" id="LN507">507</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *data);</td></tr> +<tr class="codeline" data-linenumber="508"><td class="num" id="LN508">508</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="509"><td class="num" id="LN509">509</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="510"><td class="num" id="LN510">510</td><td class="line">end_request(DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="511"><td class="num" id="LN511">511</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc != &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="512"><td class="num" id="LN512">512</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="513"><td class="num" id="LN513">513</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="514"><td class="num" id="LN514">514</td><td class="line"> DropboxFileInfoCommand *dfic = (DropboxFileInfoCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="515"><td class="num" id="LN515">515</td><td class="line"> DropboxFileInfoCommandResponse *dficr = <span class='macro'>g_new0(DropboxFileInfoCommandResponse, 1)<span class='macro_popup'>(DropboxFileInfoCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxFileInfoCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="516"><td class="num" id="LN516">516</td><td class="line"> dficr->dfic = dfic;</td></tr> +<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr->file_status_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="518"><td class="num" id="LN518">518</td><td class="line"> dficr->emblems_response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="519"><td class="num" id="LN519">519</td><td class="line"> g_idle_add((GSourceFunc) caja_dropbox_finish_file_info_command, dficr);</td></tr> +<tr class="codeline" data-linenumber="520"><td class="num" id="LN520">520</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="521"><td class="num" id="LN521">521</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="522"><td class="num" id="LN522">522</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="523"><td class="num" id="LN523">523</td><td class="line"> DropboxGeneralCommand *dgc = (DropboxGeneralCommand *) dc;</td></tr> +<tr class="codeline" data-linenumber="524"><td class="num" id="LN524">524</td><td class="line"> DropboxGeneralCommandResponse *dgcr = <span class='macro'>g_new0(DropboxGeneralCommandResponse, 1)<span class='macro_popup'>(DropboxGeneralCommandResponse *) (__extension__ ({ gsize __n<br> = (gsize) (1); gsize __s = sizeof (DropboxGeneralCommandResponse<br>); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if<br> (__builtin_constant_p (__n) && (__s == 0 || __n <=<br> (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n<br> * __s); else __p = g_malloc0_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="525"><td class="num" id="LN525">525</td><td class="line"> dgcr->dgc = dgc;</td></tr> +<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr->response = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="527"><td class="num" id="LN527">527</td><td class="line"> finish_general_command(dgcr);</td></tr> +<tr class="codeline" data-linenumber="528"><td class="num" id="LN528">528</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="529"><td class="num" id="LN529">529</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="530"><td class="num" id="LN530">530</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="531"><td class="num" id="LN531">531</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="532"><td class="num" id="LN532">532</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="533"><td class="num" id="LN533">533</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="534"><td class="num" id="LN534">534</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="535"><td class="num" id="LN535">535</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="536"><td class="num" id="LN536">536</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="537"><td class="num" id="LN537">537</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="538"><td class="num" id="LN538">538</td><td class="line"><span class='keyword'>static</span> gpointer</td></tr> +<tr class="codeline" data-linenumber="539"><td class="num" id="LN539">539</td><td class="line">dropbox_command_client_thread(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="540"><td class="num" id="LN540">540</td><td class="line"> <span class='keyword'>struct</span> sockaddr_un addr;</td></tr> +<tr class="codeline" data-linenumber="541"><td class="num" id="LN541">541</td><td class="line"> socklen_t addr_len;</td></tr> +<tr class="codeline" data-linenumber="542"><td class="num" id="LN542">542</td><td class="line"> <span class='keyword'>int</span> connection_attempts = 1;</td></tr> +<tr class="codeline" data-linenumber="543"><td class="num" id="LN543">543</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="544"><td class="num" id="LN544">544</td><td class="line"> <span class='comment'>/* intialize address structure */</span></td></tr> +<tr class="codeline" data-linenumber="545"><td class="num" id="LN545">545</td><td class="line"> addr.sun_family = <span class='macro'>AF_UNIX<span class='macro_popup'>1</span></span>;</td></tr> +<tr class="codeline" data-linenumber="546"><td class="num" id="LN546">546</td><td class="line"> g_snprintf(addr.sun_path,</td></tr> +<tr class="codeline" data-linenumber="547"><td class="num" id="LN547">547</td><td class="line"> <span class='keyword'>sizeof</span>(addr.sun_path),</td></tr> +<tr class="codeline" data-linenumber="548"><td class="num" id="LN548">548</td><td class="line"> <span class='string_literal'>"%s/.dropbox/command_socket"</span>,</td></tr> +<tr class="codeline" data-linenumber="549"><td class="num" id="LN549">549</td><td class="line"> g_get_home_dir());</td></tr> +<tr class="codeline" data-linenumber="550"><td class="num" id="LN550">550</td><td class="line"> addr_len = <span class='keyword'>sizeof</span>(addr) - <span class='keyword'>sizeof</span>(addr.sun_path) + strlen(addr.sun_path);</td></tr> +<tr class="codeline" data-linenumber="551"><td class="num" id="LN551">551</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="552"><td class="num" id="LN552">552</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="553"><td class="num" id="LN553">553</td><td class="line"> GIOChannel *chan = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="554"><td class="num" id="LN554">554</td><td class="line"> GError *gerr = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="555"><td class="num" id="LN555">555</td><td class="line"> <span class='keyword'>int</span> sock;</td></tr> +<tr class="codeline" data-linenumber="556"><td class="num" id="LN556">556</td><td class="line"> gboolean failflag = <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="557"><td class="num" id="LN557">557</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="558"><td class="num" id="LN558">558</td><td class="line"> <span class='keyword'>do</span> {</td></tr> +<tr class="codeline" data-linenumber="559"><td class="num" id="LN559">559</td><td class="line"> <span class='keyword'>int</span> flags;</td></tr> +<tr class="codeline" data-linenumber="560"><td class="num" id="LN560">560</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="561"><td class="num" id="LN561">561</td><td class="line"> <span class='keyword'>if</span> (0 > (sock = socket(<span class='macro'>PF_UNIX<span class='macro_popup'>1</span></span>, <span class='macro'>SOCK_STREAM<span class='macro_popup'>SOCK_STREAM</span></span>, 0))) {</td></tr> +<tr class="codeline" data-linenumber="562"><td class="num" id="LN562">562</td><td class="line"> <span class='comment'>/* WTF */</span></td></tr> +<tr class="codeline" data-linenumber="563"><td class="num" id="LN563">563</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="564"><td class="num" id="LN564">564</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="565"><td class="num" id="LN565">565</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="566"><td class="num" id="LN566">566</td><td class="line"> <span class='comment'>/* set timeout on socket, to protect against</span></td></tr> +<tr class="codeline" data-linenumber="567"><td class="num" id="LN567">567</td><td class="line"> <span class='comment'>bad servers */</span></td></tr> +<tr class="codeline" data-linenumber="568"><td class="num" id="LN568">568</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="569"><td class="num" id="LN569">569</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {3, 0};</td></tr> +<tr class="codeline" data-linenumber="570"><td class="num" id="LN570">570</td><td class="line"> <span class='keyword'>if</span> (0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_RCVTIMEO<span class='macro_popup'>20</span></span>,</td></tr> +<tr class="codeline" data-linenumber="571"><td class="num" id="LN571">571</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval)) ||</td></tr> +<tr class="codeline" data-linenumber="572"><td class="num" id="LN572">572</td><td class="line"> 0 > setsockopt(sock, <span class='macro'>SOL_SOCKET<span class='macro_popup'>1</span></span>, <span class='macro'>SO_SNDTIMEO<span class='macro_popup'>21</span></span>,</td></tr> +<tr class="codeline" data-linenumber="573"><td class="num" id="LN573">573</td><td class="line"> &tv, <span class='keyword'>sizeof</span>(<span class='keyword'>struct</span> timeval))) {</td></tr> +<tr class="codeline" data-linenumber="574"><td class="num" id="LN574">574</td><td class="line"> <span class='comment'>/* debug("setsockopt failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="575"><td class="num" id="LN575">575</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="576"><td class="num" id="LN576">576</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="577"><td class="num" id="LN577">577</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="578"><td class="num" id="LN578">578</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="579"><td class="num" id="LN579">579</td><td class="line"> <span class='comment'>/* set native non-blocking, for connect timeout */</span></td></tr> +<tr class="codeline" data-linenumber="580"><td class="num" id="LN580">580</td><td class="line"> {</td></tr> +<tr class="codeline" data-linenumber="581"><td class="num" id="LN581">581</td><td class="line"> <span class='keyword'>if</span> ((flags = fcntl(sock, <span class='macro'>F_GETFL<span class='macro_popup'>3</span></span>, 0)) < 0 ||</td></tr> +<tr class="codeline" data-linenumber="582"><td class="num" id="LN582">582</td><td class="line"> fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags | <span class='macro'>O_NONBLOCK<span class='macro_popup'>04000</span></span>) < 0) {</td></tr> +<tr class="codeline" data-linenumber="583"><td class="num" id="LN583">583</td><td class="line"> <span class='comment'>/* debug("fcntl failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="584"><td class="num" id="LN584">584</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="585"><td class="num" id="LN585">585</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="586"><td class="num" id="LN586">586</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="587"><td class="num" id="LN587">587</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="588"><td class="num" id="LN588">588</td><td class="line"> <span class='comment'>/* if there was an error we have to try again later */</span></td></tr> +<tr class="codeline" data-linenumber="589"><td class="num" id="LN589">589</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="590"><td class="num" id="LN590">590</td><td class="line"> <span class='keyword'>if</span> (<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span> == <span class='macro'>EINPROGRESS<span class='macro_popup'>115</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="591"><td class="num" id="LN591">591</td><td class="line"> fd_set writers;</td></tr> +<tr class="codeline" data-linenumber="592"><td class="num" id="LN592">592</td><td class="line"> <span class='keyword'>struct</span> timeval tv = {1, 0};</td></tr> +<tr class="codeline" data-linenumber="593"><td class="num" id="LN593">593</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="594"><td class="num" id="LN594">594</td><td class="line"> <span class='macro'>FD_ZERO(&writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&writers); for (__i<br> = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)->__fds_bits)[__i] = 0; } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="595"><td class="num" id="LN595">595</td><td class="line"> <span class='macro'>FD_SET(sock, &writers)<span class='macro_popup'>((void) (((&writers)->__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((sock) %<br> (8 * (int) sizeof (__fd_mask)))))))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="596"><td class="num" id="LN596">596</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="597"><td class="num" id="LN597">597</td><td class="line"> <span class='comment'>/* if nothing was ready after 3 seconds, fail out homie */</span></td></tr> +<tr class="codeline" data-linenumber="598"><td class="num" id="LN598">598</td><td class="line"> <span class='keyword'>if</span> (select(sock+1, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &tv) == 0) {</td></tr> +<tr class="codeline" data-linenumber="599"><td class="num" id="LN599">599</td><td class="line"> <span class='comment'>/* debug("connection timeout"); */</span></td></tr> +<tr class="codeline" data-linenumber="600"><td class="num" id="LN600">600</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="601"><td class="num" id="LN601">601</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="602"><td class="num" id="LN602">602</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="603"><td class="num" id="LN603">603</td><td class="line"> <span class='keyword'>if</span> (connect(sock, (<span class='keyword'>struct</span> sockaddr *) &addr, addr_len) < 0) {</td></tr> +<tr class="codeline" data-linenumber="604"><td class="num" id="LN604">604</td><td class="line"> <span class='comment'>/* debug("couldn't connect to command server after 1 second"); */</span></td></tr> +<tr class="codeline" data-linenumber="605"><td class="num" id="LN605">605</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="606"><td class="num" id="LN606">606</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="607"><td class="num" id="LN607">607</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="608"><td class="num" id="LN608">608</td><td class="line"> <span class='comment'>/* errno != EINPROGRESS */</span></td></tr> +<tr class="codeline" data-linenumber="609"><td class="num" id="LN609">609</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="610"><td class="num" id="LN610">610</td><td class="line"> <span class='comment'>/* debug("bad connection"); */</span></td></tr> +<tr class="codeline" data-linenumber="611"><td class="num" id="LN611">611</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="612"><td class="num" id="LN612">612</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="613"><td class="num" id="LN613">613</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="614"><td class="num" id="LN614">614</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="615"><td class="num" id="LN615">615</td><td class="line"> <span class='comment'>/* set back to blocking */</span></td></tr> +<tr class="codeline" data-linenumber="616"><td class="num" id="LN616">616</td><td class="line"> <span class='keyword'>if</span> (fcntl(sock, <span class='macro'>F_SETFL<span class='macro_popup'>4</span></span>, flags) < 0) {</td></tr> +<tr class="codeline" data-linenumber="617"><td class="num" id="LN617">617</td><td class="line"> <span class='comment'>/* debug("fcntl2 failed"); */</span></td></tr> +<tr class="codeline" data-linenumber="618"><td class="num" id="LN618">618</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="619"><td class="num" id="LN619">619</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="620"><td class="num" id="LN620">620</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="621"><td class="num" id="LN621">621</td><td class="line"> failflag = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="622"><td class="num" id="LN622">622</td><td class="line"> } <span class='keyword'>while</span> (0);</td></tr> +<tr class="codeline" data-linenumber="623"><td class="num" id="LN623">623</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="624"><td class="num" id="LN624">624</td><td class="line"> <span class='keyword'>if</span> (failflag) {</td></tr> +<tr class="codeline" data-linenumber="625"><td class="num" id="LN625">625</td><td class="line"> ConnectionAttempt *ca = <span class='macro'>g_new(ConnectionAttempt, 1)<span class='macro_popup'>(ConnectionAttempt *) (__extension__ ({ gsize __n = (gsize) (<br>1); gsize __s = sizeof (ConnectionAttempt); gpointer __p; if (<br>__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="626"><td class="num" id="LN626">626</td><td class="line"> ca->dcc = dcc;</td></tr> +<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca->connect_attempt = connection_attempts;</td></tr> +<tr class="codeline" data-linenumber="628"><td class="num" id="LN628">628</td><td class="line"> g_idle_add((GSourceFunc) on_connection_attempt, ca);</td></tr> +<tr class="codeline" data-linenumber="629"><td class="num" id="LN629">629</td><td class="line"> <span class='keyword'>if</span> (sock >= 0) {</td></tr> +<tr class="codeline" data-linenumber="630"><td class="num" id="LN630">630</td><td class="line"> close(sock);</td></tr> +<tr class="codeline" data-linenumber="631"><td class="num" id="LN631">631</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="632"><td class="num" id="LN632">632</td><td class="line"> g_usleep(<span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span>);</td></tr> +<tr class="codeline" data-linenumber="633"><td class="num" id="LN633">633</td><td class="line"> connection_attempts++;</td></tr> +<tr class="codeline" data-linenumber="634"><td class="num" id="LN634">634</td><td class="line"> <span class='keyword'>continue</span>;</td></tr> +<tr class="codeline" data-linenumber="635"><td class="num" id="LN635">635</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="636"><td class="num" id="LN636">636</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="637"><td class="num" id="LN637">637</td><td class="line"> connection_attempts = 0;</td></tr> +<tr class="codeline" data-linenumber="638"><td class="num" id="LN638">638</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="639"><td class="num" id="LN639">639</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="640"><td class="num" id="LN640">640</td><td class="line"> <span class='comment'>/* connected */</span></td></tr> +<tr class="codeline" data-linenumber="641"><td class="num" id="LN641">641</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command client connected"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="642"><td class="num" id="LN642">642</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="643"><td class="num" id="LN643">643</td><td class="line"> chan = g_io_channel_unix_new(sock);</td></tr> +<tr class="codeline" data-linenumber="644"><td class="num" id="LN644">644</td><td class="line"> g_io_channel_set_close_on_unref(chan, <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="645"><td class="num" id="LN645">645</td><td class="line"> g_io_channel_set_line_term(chan, <span class='string_literal'>"\n"</span>, -1);</td></tr> +<tr class="codeline" data-linenumber="646"><td class="num" id="LN646">646</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="647"><td class="num" id="LN647">647</td><td class="line"><span class='directive'>#define SET_CONNECTED_STATE(s) { \</span></td></tr> +<tr class="codeline" data-linenumber="648"><td class="num" id="LN648">648</td><td class="line"> <span class='directive'>g_mutex_lock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="649"><td class="num" id="LN649">649</td><td class="line"> <span class='directive'>dcc->command_connected = s; \</span></td></tr> +<tr class="codeline" data-linenumber="650"><td class="num" id="LN650">650</td><td class="line"> <span class='directive'>g_mutex_unlock(&(dcc->command_connected_mutex)); \</span></td></tr> +<tr class="codeline" data-linenumber="651"><td class="num" id="LN651">651</td><td class="line"> <span class='directive'>}</span></td></tr> +<tr class="codeline" data-linenumber="652"><td class="num" id="LN652">652</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="653"><td class="num" id="LN653">653</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>);</td></tr> +<tr class="codeline" data-linenumber="654"><td class="num" id="LN654">654</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="655"><td class="num" id="LN655">655</td><td class="line"> g_idle_add((GSourceFunc) on_connect, dcc);</td></tr> +<tr class="codeline" data-linenumber="656"><td class="num" id="LN656">656</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="657"><td class="num" id="LN657">657</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="658"><td class="num" id="LN658">658</td><td class="line"> DropboxCommand *dc;</td></tr> +<tr class="codeline" data-linenumber="659"><td class="num" id="LN659">659</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="660"><td class="num" id="LN660">660</td><td class="line"> <span class='keyword'>while</span> (1) {</td></tr> +<tr class="codeline" data-linenumber="661"><td class="num" id="LN661">661</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="662"><td class="num" id="LN662">662</td><td class="line"> <span class='comment'>/* get a request from caja */</span></td></tr> +<tr class="codeline" data-linenumber="663"><td class="num" id="LN663">663</td><td class="line"> dc = g_async_queue_timeout_pop(dcc->command_queue, <span class='macro'>G_USEC_PER_SEC<span class='macro_popup'>1000000</span></span> / 10);</td></tr> +<tr class="codeline" data-linenumber="664"><td class="num" id="LN664">664</td><td class="line"> <span class='keyword'>if</span> (dc != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="665"><td class="num" id="LN665">665</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="666"><td class="num" id="LN666">666</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="667"><td class="num" id="LN667">667</td><td class="line"> <span class='keyword'>else</span> {</td></tr> +<tr class="codeline" data-linenumber="668"><td class="num" id="LN668">668</td><td class="line"> <span class='keyword'>if</span> (check_connection(chan) == <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="669"><td class="num" id="LN669">669</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="670"><td class="num" id="LN670">670</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="671"><td class="num" id="LN671">671</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="672"><td class="num" id="LN672">672</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="673"><td class="num" id="LN673">673</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="674"><td class="num" id="LN674">674</td><td class="line"> <span class='comment'>/* this pointer should be unique */</span></td></tr> +<tr class="codeline" data-linenumber="675"><td class="num" id="LN675">675</td><td class="line"> <span class='keyword'>if</span> ((gpointer (*)(DropboxCommandClient *data)) dc == &dropbox_command_client_thread) {</td></tr> +<tr class="codeline" data-linenumber="676"><td class="num" id="LN676">676</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"got a reset request"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="677"><td class="num" id="LN677">677</td><td class="line"> <span class='keyword'>goto</span> BADCONNECTION;</td></tr> +<tr class="codeline" data-linenumber="678"><td class="num" id="LN678">678</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="679"><td class="num" id="LN679">679</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="680"><td class="num" id="LN680">680</td><td class="line"> <span class='keyword'>switch</span> (dc->request_type) {</td></tr> +<tr class="codeline" data-linenumber="681"><td class="num" id="LN681">681</td><td class="line"> <span class='keyword'>case</span> GET_FILE_INFO: {</td></tr> +<tr class="codeline" data-linenumber="682"><td class="num" id="LN682">682</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing file info command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="683"><td class="num" id="LN683">683</td><td class="line"> do_file_info_command(chan, (DropboxFileInfoCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="684"><td class="num" id="LN684">684</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="685"><td class="num" id="LN685">685</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="686"><td class="num" id="LN686">686</td><td class="line"> <span class='keyword'>case</span> GENERAL_COMMAND: {</td></tr> +<tr class="codeline" data-linenumber="687"><td class="num" id="LN687">687</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"doing general command"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="688"><td class="num" id="LN688">688</td><td class="line"> do_general_command(chan, (DropboxGeneralCommand *) dc, &gerr);</td></tr> +<tr class="codeline" data-linenumber="689"><td class="num" id="LN689">689</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="690"><td class="num" id="LN690">690</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="691"><td class="num" id="LN691">691</td><td class="line"> <span class='keyword'>default</span>:</td></tr> +<tr class="codeline" data-linenumber="692"><td class="num" id="LN692">692</td><td class="line"> <span class='macro'>g_assert_not_reached()<span class='macro_popup'>do { (void) 0; __builtin_unreachable (); } while (0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="693"><td class="num" id="LN693">693</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="694"><td class="num" id="LN694">694</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="695"><td class="num" id="LN695">695</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="696"><td class="num" id="LN696">696</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"done."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="697"><td class="num" id="LN697">697</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="698"><td class="num" id="LN698">698</td><td class="line"> <span class='keyword'>if</span> (gerr != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="699"><td class="num" id="LN699">699</td><td class="line"> <span class='comment'>// debug("COMMAND ERROR*****************************");</span></td></tr> +<tr class="codeline" data-linenumber="700"><td class="num" id="LN700">700</td><td class="line"> <span class='comment'>/* mark this request as never to be completed */</span></td></tr> +<tr class="codeline" data-linenumber="701"><td class="num" id="LN701">701</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="702"><td class="num" id="LN702">702</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="703"><td class="num" id="LN703">703</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"command error: %s"</span>, gerr->message)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="704"><td class="num" id="LN704">704</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="705"><td class="num" id="LN705">705</td><td class="line"> g_error_free(gerr);</td></tr> +<tr class="codeline" data-linenumber="706"><td class="num" id="LN706">706</td><td class="line"> BADCONNECTION:</td></tr> +<tr class="codeline" data-linenumber="707"><td class="num" id="LN707">707</td><td class="line"> <span class='comment'>/* grab all the rest of the data off the async queue and mark it</span></td></tr> +<tr class="codeline" data-linenumber="708"><td class="num" id="LN708">708</td><td class="line"> <span class='comment'>never to be completed, who knows how long we'll be disconnected */</span></td></tr> +<tr class="codeline" data-linenumber="709"><td class="num" id="LN709">709</td><td class="line"> <span class='keyword'>while</span> ((dc = g_async_queue_try_pop(dcc->command_queue)) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="710"><td class="num" id="LN710">710</td><td class="line"> end_request(dc);</td></tr> +<tr class="codeline" data-linenumber="711"><td class="num" id="LN711">711</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="712"><td class="num" id="LN712">712</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="713"><td class="num" id="LN713">713</td><td class="line"> g_io_channel_unref(chan);</td></tr> +<tr class="codeline" data-linenumber="714"><td class="num" id="LN714">714</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="715"><td class="num" id="LN715">715</td><td class="line"> SET_CONNECTED_STATE(<span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>);</td></tr> +<tr class="codeline" data-linenumber="716"><td class="num" id="LN716">716</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="717"><td class="num" id="LN717">717</td><td class="line"> <span class='comment'>/* call the disconnect handler */</span></td></tr> +<tr class="codeline" data-linenumber="718"><td class="num" id="LN718">718</td><td class="line"> g_idle_add((GSourceFunc) on_disconnect, dcc);</td></tr> +<tr class="codeline" data-linenumber="719"><td class="num" id="LN719">719</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="720"><td class="num" id="LN720">720</td><td class="line"> <span class='keyword'>break</span>;</td></tr> +<tr class="codeline" data-linenumber="721"><td class="num" id="LN721">721</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="722"><td class="num" id="LN722">722</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="723"><td class="num" id="LN723">723</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="724"><td class="num" id="LN724">724</td><td class="line"><span class='directive'>#undef SET_CONNECTED_STATE</span></td></tr> +<tr class="codeline" data-linenumber="725"><td class="num" id="LN725">725</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="726"><td class="num" id="LN726">726</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="727"><td class="num" id="LN727">727</td><td class="line"> <span class='keyword'>return</span> <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="728"><td class="num" id="LN728">728</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="729"><td class="num" id="LN729">729</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="730"><td class="num" id="LN730">730</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="731"><td class="num" id="LN731">731</td><td class="line">gboolean</td></tr> +<tr class="codeline" data-linenumber="732"><td class="num" id="LN732">732</td><td class="line">dropbox_command_client_is_connected(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="733"><td class="num" id="LN733">733</td><td class="line"> gboolean command_connected;</td></tr> +<tr class="codeline" data-linenumber="734"><td class="num" id="LN734">734</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="735"><td class="num" id="LN735">735</td><td class="line"> g_mutex_lock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc->command_connected;</td></tr> +<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="738"><td class="num" id="LN738">738</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="739"><td class="num" id="LN739">739</td><td class="line"> <span class='keyword'>return</span> command_connected;</td></tr> +<tr class="codeline" data-linenumber="740"><td class="num" id="LN740">740</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="741"><td class="num" id="LN741">741</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="742"><td class="num" id="LN742">742</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="743"><td class="num" id="LN743">743</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_force_reconnect(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="744"><td class="num" id="LN744">744</td><td class="line"> <span class='keyword'>if</span> (dropbox_command_client_is_connected(dcc) == <span class='macro'>TRUE<span class='macro_popup'>(!(0))</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="745"><td class="num" id="LN745">745</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"forcing command to reconnect"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="746"><td class="num" id="LN746">746</td><td class="line"> dropbox_command_client_request(dcc, <span class="mrange"><span class="mrange">(DropboxCommand *) &dropbox_command_client_thread</span></span>);</td></tr> +<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:41ex; max-width:31em">Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption</div></td></tr> +<tr class="codeline" data-linenumber="747"><td class="num" id="LN747">747</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="748"><td class="num" id="LN748">748</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="749"><td class="num" id="LN749">749</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="750"><td class="num" id="LN750">750</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="751"><td class="num" id="LN751">751</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="752"><td class="num" id="LN752">752</td><td class="line">dropbox_command_client_request(DropboxCommandClient *dcc, DropboxCommand *dc) {</td></tr> +<tr class="codeline" data-linenumber="753"><td class="num" id="LN753">753</td><td class="line"> g_async_queue_push(dcc->command_queue, dc);</td></tr> +<tr class="codeline" data-linenumber="754"><td class="num" id="LN754">754</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="755"><td class="num" id="LN755">755</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="756"><td class="num" id="LN756">756</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="757"><td class="num" id="LN757">757</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="758"><td class="num" id="LN758">758</td><td class="line">dropbox_command_client_setup(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="759"><td class="num" id="LN759">759</td><td class="line"> dcc->command_queue = g_async_queue_new();</td></tr> +<tr class="codeline" data-linenumber="760"><td class="num" id="LN760">760</td><td class="line"> g_mutex_init(&(dcc->command_connected_mutex));</td></tr> +<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc->command_connected = <span class='macro'>FALSE<span class='macro_popup'>(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="762"><td class="num" id="LN762">762</td><td class="line"> dcc->ca_hooklist = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="763"><td class="num" id="LN763">763</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="764"><td class="num" id="LN764">764</td><td class="line"> g_hook_list_init(&(dcc->ondisconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="765"><td class="num" id="LN765">765</td><td class="line"> g_hook_list_init(&(dcc->onconnect_hooklist), <span class='keyword'>sizeof</span>(GHook));</td></tr> +<tr class="codeline" data-linenumber="766"><td class="num" id="LN766">766</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="767"><td class="num" id="LN767">767</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="768"><td class="num" id="LN768">768</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="769"><td class="num" id="LN769">769</td><td class="line">dropbox_command_client_add_on_disconnect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="770"><td class="num" id="LN770">770</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="771"><td class="num" id="LN771">771</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="772"><td class="num" id="LN772">772</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="773"><td class="num" id="LN773">773</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="774"><td class="num" id="LN774">774</td><td class="line"> newhook = g_hook_alloc(&(dcc->ondisconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="777"><td class="num" id="LN777">777</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="778"><td class="num" id="LN778">778</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->ondisconnect_hooklist)),<br> ((void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="779"><td class="num" id="LN779">779</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="780"><td class="num" id="LN780">780</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="781"><td class="num" id="LN781">781</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="782"><td class="num" id="LN782">782</td><td class="line">dropbox_command_client_add_on_connect_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="783"><td class="num" id="LN783">783</td><td class="line"> DropboxCommandClientConnectHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="784"><td class="num" id="LN784">784</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="785"><td class="num" id="LN785">785</td><td class="line"> GHook *newhook;</td></tr> +<tr class="codeline" data-linenumber="786"><td class="num" id="LN786">786</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="787"><td class="num" id="LN787">787</td><td class="line"> newhook = g_hook_alloc(&(dcc->onconnect_hooklist));</td></tr> +<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook->func = dhcch;</td></tr> +<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook->data = ud;</td></tr> +<tr class="codeline" data-linenumber="790"><td class="num" id="LN790">790</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="791"><td class="num" id="LN791">791</td><td class="line"> <span class='macro'>g_hook_append(&(dcc->onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&(dcc->onconnect_hooklist)), ((<br>void*)0), (newhook))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="792"><td class="num" id="LN792">792</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="793"><td class="num" id="LN793">793</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="794"><td class="num" id="LN794">794</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="795"><td class="num" id="LN795">795</td><td class="line">dropbox_command_client_add_connection_attempt_hook(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="796"><td class="num" id="LN796">796</td><td class="line"> DropboxCommandClientConnectionAttemptHook dhcch,</td></tr> +<tr class="codeline" data-linenumber="797"><td class="num" id="LN797">797</td><td class="line"> gpointer ud) {</td></tr> +<tr class="codeline" data-linenumber="798"><td class="num" id="LN798">798</td><td class="line"> DropboxCommandClientConnectionAttempt *newhook;</td></tr> +<tr class="codeline" data-linenumber="799"><td class="num" id="LN799">799</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="800"><td class="num" id="LN800">800</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"shouldn't be here..."</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="801"><td class="num" id="LN801">801</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="802"><td class="num" id="LN802">802</td><td class="line"> newhook = <span class='macro'>g_new(DropboxCommandClientConnectionAttempt, 1)<span class='macro_popup'>(DropboxCommandClientConnectionAttempt *) (__extension__ ({ gsize<br> __n = (gsize) (1); gsize __s = sizeof (DropboxCommandClientConnectionAttempt<br>); gpointer __p; if (__s == 1) __p = g_malloc (__n); else if (<br>__builtin_constant_p (__n) && (__s == 0 || __n <= (<br>9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc (__n * __s<br>); else __p = g_malloc_n (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="803"><td class="num" id="LN803">803</td><td class="line"> newhook->h = dhcch;</td></tr> +<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook->ud = ud;</td></tr> +<tr class="codeline" data-linenumber="805"><td class="num" id="LN805">805</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="806"><td class="num" id="LN806">806</td><td class="line"> dcc->ca_hooklist = g_list_append(dcc->ca_hooklist, newhook);</td></tr> +<tr class="codeline" data-linenumber="807"><td class="num" id="LN807">807</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="808"><td class="num" id="LN808">808</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="809"><td class="num" id="LN809">809</td><td class="line"><span class='comment'>/* should only be called once on initialization */</span></td></tr> +<tr class="codeline" data-linenumber="810"><td class="num" id="LN810">810</td><td class="line"><span class='keyword'>void</span></td></tr> +<tr class="codeline" data-linenumber="811"><td class="num" id="LN811">811</td><td class="line">dropbox_command_client_start(DropboxCommandClient *dcc) {</td></tr> +<tr class="codeline" data-linenumber="812"><td class="num" id="LN812">812</td><td class="line"> <span class='comment'>/* setup the connect to the command server */</span></td></tr> +<tr class="codeline" data-linenumber="813"><td class="num" id="LN813">813</td><td class="line"> <span class='macro'>debug(<span class='string_literal'>"starting command thread"</span>)<span class='macro_popup'>do {} while(0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="814"><td class="num" id="LN814">814</td><td class="line"> g_thread_new(<span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, (GThreadFunc) dropbox_command_client_thread, dcc);</td></tr> +<tr class="codeline" data-linenumber="815"><td class="num" id="LN815">815</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="816"><td class="num" id="LN816">816</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="817"><td class="num" id="LN817">817</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="818"><td class="num" id="LN818">818</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_simple_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="819"><td class="num" id="LN819">819</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command) {</td></tr> +<tr class="codeline" data-linenumber="820"><td class="num" id="LN820">820</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="821"><td class="num" id="LN821">821</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="822"><td class="num" id="LN822">822</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="823"><td class="num" id="LN823">823</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="824"><td class="num" id="LN824">824</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc->command_name = <span class='macro'>g_strdup(command)<span class='macro_popup'>g_strdup_inline (command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc->command_args = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="827"><td class="num" id="LN827">827</td><td class="line"> dgc->handler = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="828"><td class="num" id="LN828">828</td><td class="line"> dgc->handler_ud = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="829"><td class="num" id="LN829">829</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="830"><td class="num" id="LN830">830</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="831"><td class="num" id="LN831">831</td><td class="line">}</td></tr> +<tr class="codeline" data-linenumber="832"><td class="num" id="LN832">832</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="833"><td class="num" id="LN833">833</td><td class="line"><span class='comment'>/* thread safe */</span></td></tr> +<tr class="codeline" data-linenumber="834"><td class="num" id="LN834">834</td><td class="line"><span class='comment'>/* this is the C API, there is another send_command_to_db</span></td></tr> +<tr class="codeline" data-linenumber="835"><td class="num" id="LN835">835</td><td class="line"> <span class='comment'>that is more the actual over the wire command */</span></td></tr> +<tr class="codeline" data-linenumber="836"><td class="num" id="LN836">836</td><td class="line"><span class='keyword'>void</span> dropbox_command_client_send_command(DropboxCommandClient *dcc,</td></tr> +<tr class="codeline" data-linenumber="837"><td class="num" id="LN837">837</td><td class="line"> CajaDropboxCommandResponseHandler h,</td></tr> +<tr class="codeline" data-linenumber="838"><td class="num" id="LN838">838</td><td class="line"> gpointer ud,</td></tr> +<tr class="codeline" data-linenumber="839"><td class="num" id="LN839">839</td><td class="line"> <span class='keyword'>const</span> <span class='keyword'>char</span> *command, ...) {</td></tr> +<tr class="codeline" data-linenumber="840"><td class="num" id="LN840">840</td><td class="line"> va_list ap;</td></tr> +<tr class="codeline" data-linenumber="841"><td class="num" id="LN841">841</td><td class="line"> DropboxGeneralCommand *dgc;</td></tr> +<tr class="codeline" data-linenumber="842"><td class="num" id="LN842">842</td><td class="line"> gchar *na;</td></tr> +<tr class="codeline" data-linenumber="843"><td class="num" id="LN843">843</td><td class="line"> <span class='macro'>va_start(ap, command)<span class='macro_popup'>__builtin_va_start(ap, command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="844"><td class="num" id="LN844">844</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="845"><td class="num" id="LN845">845</td><td class="line"> dgc = <span class='macro'>g_new(DropboxGeneralCommand, 1)<span class='macro_popup'>(DropboxGeneralCommand *) (__extension__ ({ gsize __n = (gsize<br>) (1); gsize __s = sizeof (DropboxGeneralCommand); gpointer __p<br>; if (__s == 1) __p = g_malloc (__n); else if (__builtin_constant_p<br> (__n) && (__s == 0 || __n <= (9223372036854775807L<br> *2UL+1UL) / __s)) __p = g_malloc (__n * __s); else __p = g_malloc_n<br> (__n, __s); __p; }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="846"><td class="num" id="LN846">846</td><td class="line"> dgc->dc.request_type = GENERAL_COMMAND;</td></tr> +<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc->command_name = <span class='macro'>g_strdup(command)<span class='macro_popup'>g_strdup_inline (command)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc->command_args = g_hash_table_new_full((GHashFunc) g_str_hash,</td></tr> +<tr class="codeline" data-linenumber="849"><td class="num" id="LN849">849</td><td class="line"> (GEqualFunc) g_str_equal,</td></tr> +<tr class="codeline" data-linenumber="850"><td class="num" id="LN850">850</td><td class="line"> (GDestroyNotify) g_free,</td></tr> +<tr class="codeline" data-linenumber="851"><td class="num" id="LN851">851</td><td class="line"> (GDestroyNotify) g_strfreev);</td></tr> +<tr class="codeline" data-linenumber="852"><td class="num" id="LN852">852</td><td class="line"> <span class='comment'>/*</span></td></tr> +<tr class="codeline" data-linenumber="853"><td class="num" id="LN853">853</td><td class="line"> <span class='comment'>* NB: The handler is called in the DropboxCommandClient Thread. If you need</span></td></tr> +<tr class="codeline" data-linenumber="854"><td class="num" id="LN854">854</td><td class="line"> <span class='comment'>* it in the main thread you must call g_idle_add in the callback.</span></td></tr> +<tr class="codeline" data-linenumber="855"><td class="num" id="LN855">855</td><td class="line"> <span class='comment'>*/</span></td></tr> +<tr class="codeline" data-linenumber="856"><td class="num" id="LN856">856</td><td class="line"> dgc->handler = h;</td></tr> +<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc->handler_ud = ud;</td></tr> +<tr class="codeline" data-linenumber="858"><td class="num" id="LN858">858</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="859"><td class="num" id="LN859">859</td><td class="line"> <span class='keyword'>while</span> ((na = <span class='macro'>va_arg(ap, <span class='keyword'>char</span> *)<span class='macro_popup'>__builtin_va_arg(ap, char *)</span></span>) != <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>) {</td></tr> +<tr class="codeline" data-linenumber="860"><td class="num" id="LN860">860</td><td class="line"> gchar **is_active_arg;</td></tr> +<tr class="codeline" data-linenumber="861"><td class="num" id="LN861">861</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="862"><td class="num" id="LN862">862</td><td class="line"> is_active_arg = <span class='macro'>g_new(gchar *, 2)<span class='macro_popup'>(gchar * *) (__extension__ ({ gsize __n = (gsize) (2); gsize __s<br> = sizeof (gchar *); gpointer __p; if (__s == 1) __p = g_malloc<br> (__n); else if (__builtin_constant_p (__n) && (__s ==<br> 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p =<br> g_malloc (__n * __s); else __p = g_malloc_n (__n, __s); __p;<br> }))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="863"><td class="num" id="LN863">863</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="864"><td class="num" id="LN864">864</td><td class="line"> g_hash_table_insert(dgc->command_args,</td></tr> +<tr class="codeline" data-linenumber="865"><td class="num" id="LN865">865</td><td class="line"> <span class='macro'>g_strdup(na)<span class='macro_popup'>g_strdup_inline (na)</span></span>, is_active_arg);</td></tr> +<tr class="codeline" data-linenumber="866"><td class="num" id="LN866">866</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="867"><td class="num" id="LN867">867</td><td class="line"> is_active_arg[0] = <span class='macro'>g_strdup(va_arg(ap, <span class='keyword'>char</span> *))<span class='macro_popup'>g_strdup_inline (__builtin_va_arg(ap, char *))</span></span>;</td></tr> +<tr class="codeline" data-linenumber="868"><td class="num" id="LN868">868</td><td class="line"> is_active_arg[1] = <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="869"><td class="num" id="LN869">869</td><td class="line"> }</td></tr> +<tr class="codeline" data-linenumber="870"><td class="num" id="LN870">870</td><td class="line"> <span class='macro'>va_end(ap)<span class='macro_popup'>__builtin_va_end(ap)</span></span>;</td></tr> +<tr class="codeline" data-linenumber="871"><td class="num" id="LN871">871</td><td class="line"> </td></tr> +<tr class="codeline" data-linenumber="872"><td class="num" id="LN872">872</td><td class="line"> dropbox_command_client_request(dcc, (DropboxCommand *) dgc);</td></tr> +<tr class="codeline" data-linenumber="873"><td class="num" id="LN873">873</td><td class="line">}</td></tr> +</table></body></html> diff --git a/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/scanview.css b/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/scanview.css new file mode 100644 index 0000000..cf8a5a6 --- /dev/null +++ b/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/scanview.css @@ -0,0 +1,62 @@ +body { color:#000000; background-color:#ffffff } +body { font-family: Helvetica, sans-serif; font-size:9pt } +h1 { font-size: 14pt; } +h2 { font-size: 12pt; } +table { font-size:9pt } +table { border-spacing: 0px; border: 1px solid black } +th, table thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:center; + font-weight: bold; font-family: Verdana; + white-space:nowrap; +} +.W { font-size:0px } +th, td { padding:5px; padding-left:8px; text-align:left } +td.SUMM_DESC { padding-left:12px } +td.DESC { white-space:pre } +td.Q { text-align:right } +td { text-align:left } +tbody.scrollContent { overflow:auto } + +table.form_group { + background-color: #ccc; + border: 1px solid #333; + padding: 2px; +} + +table.form_inner_group { + background-color: #ccc; + border: 1px solid #333; + padding: 0px; +} + +table.form { + background-color: #999; + border: 1px solid #333; + padding: 2px; +} + +td.form_label { + text-align: right; + vertical-align: top; +} +/* For one line entires */ +td.form_clabel { + text-align: right; + vertical-align: center; +} +td.form_value { + text-align: left; + vertical-align: top; +} +td.form_submit { + text-align: right; + vertical-align: top; +} + +h1.SubmitFail { + color: #f00; +} +h1.SubmitOk { +} diff --git a/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/sorttable.js b/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/sorttable.js new file mode 100644 index 0000000..32faa07 --- /dev/null +++ b/2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/sorttable.js @@ -0,0 +1,492 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backward compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + //row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[�$�]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/0.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/0.html new file mode 100644 index 0000000..91801fd --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/0.html @@ -0,0 +1,911 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/caja-dropbox-hooks.c</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> caja-dropbox-hooks.c</p> +<a href="0.html#line-24"> missingIncludeSystem 24</a><a href="0.html#line-25"> missingIncludeSystem 25</a><a href="0.html#line-26"> missingIncludeSystem 26</a><a href="0.html#line-27"> missingIncludeSystem 27</a><a href="0.html#line-28"> missingIncludeSystem 28</a><a href="0.html#line-29"> missingIncludeSystem 29</a><a href="0.html#line-31"> missingIncludeSystem 31</a><a href="0.html#line-33"> missingIncludeSystem 33</a><a href="0.html#line-283"> constParameterPointer 283</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span> +<span class="normal">114</span> +<span class="normal">115</span> +<span class="normal">116</span> +<span class="normal">117</span> +<span class="normal">118</span> +<span class="normal">119</span> +<span class="normal">120</span> +<span class="normal">121</span> +<span class="normal">122</span> +<span class="normal">123</span> +<span class="normal">124</span> +<span class="normal">125</span> +<span class="normal">126</span> +<span class="normal">127</span> +<span class="normal">128</span> +<span class="normal">129</span> +<span class="normal">130</span> +<span class="normal">131</span> +<span class="normal">132</span> +<span class="normal">133</span> +<span class="normal">134</span> +<span class="normal">135</span> +<span class="normal">136</span> +<span class="normal">137</span> +<span class="normal">138</span> +<span class="normal">139</span> +<span class="normal">140</span> +<span class="normal">141</span> +<span class="normal">142</span> +<span class="normal">143</span> +<span class="normal">144</span> +<span class="normal">145</span> +<span class="normal">146</span> +<span class="normal">147</span> +<span class="normal">148</span> +<span class="normal">149</span> +<span class="normal">150</span> +<span class="normal">151</span> +<span class="normal">152</span> +<span class="normal">153</span> +<span class="normal">154</span> +<span class="normal">155</span> +<span class="normal">156</span> +<span class="normal">157</span> +<span class="normal">158</span> +<span class="normal">159</span> +<span class="normal">160</span> +<span class="normal">161</span> +<span class="normal">162</span> +<span class="normal">163</span> +<span class="normal">164</span> +<span class="normal">165</span> +<span class="normal">166</span> +<span class="normal">167</span> +<span class="normal">168</span> +<span class="normal">169</span> +<span class="normal">170</span> +<span class="normal">171</span> +<span class="normal">172</span> +<span class="normal">173</span> +<span class="normal">174</span> +<span class="normal">175</span> +<span class="normal">176</span> +<span class="normal">177</span> +<span class="normal">178</span> +<span class="normal">179</span> +<span class="normal">180</span> +<span class="normal">181</span> +<span class="normal">182</span> +<span class="normal">183</span> +<span class="normal">184</span> +<span class="normal">185</span> +<span class="normal">186</span> +<span class="normal">187</span> +<span class="normal">188</span> +<span class="normal">189</span> +<span class="normal">190</span> +<span class="normal">191</span> +<span class="normal">192</span> +<span class="normal">193</span> +<span class="normal">194</span> +<span class="normal">195</span> +<span class="normal">196</span> +<span class="normal">197</span> +<span class="normal">198</span> +<span class="normal">199</span> +<span class="normal">200</span> +<span class="normal">201</span> +<span class="normal">202</span> +<span class="normal">203</span> +<span class="normal">204</span> +<span class="normal">205</span> +<span class="normal">206</span> +<span class="normal">207</span> +<span class="normal">208</span> +<span class="normal">209</span> +<span class="normal">210</span> +<span class="normal">211</span> +<span class="normal">212</span> +<span class="normal">213</span> +<span class="normal">214</span> +<span class="normal">215</span> +<span class="normal">216</span> +<span class="normal">217</span> +<span class="normal">218</span> +<span class="normal">219</span> +<span class="normal">220</span> +<span class="normal">221</span> +<span class="normal">222</span> +<span class="normal">223</span> +<span class="normal">224</span> +<span class="normal">225</span> +<span class="normal">226</span> +<span class="normal">227</span> +<span class="normal">228</span> +<span class="normal">229</span> +<span class="normal">230</span> +<span class="normal">231</span> +<span class="normal">232</span> +<span class="normal">233</span> +<span class="normal">234</span> +<span class="normal">235</span> +<span class="normal">236</span> +<span class="normal">237</span> +<span class="normal">238</span> +<span class="normal">239</span> +<span class="normal">240</span> +<span class="normal">241</span> +<span class="normal">242</span> +<span class="normal">243</span> +<span class="normal">244</span> +<span class="normal">245</span> +<span class="normal">246</span> +<span class="normal">247</span> +<span class="normal">248</span> +<span class="normal">249</span> +<span class="normal">250</span> +<span class="normal">251</span> +<span class="normal">252</span> +<span class="normal">253</span> +<span class="normal">254</span> +<span class="normal">255</span> +<span class="normal">256</span> +<span class="normal">257</span> +<span class="normal">258</span> +<span class="normal">259</span> +<span class="normal">260</span> +<span class="normal">261</span> +<span class="normal">262</span> +<span class="normal">263</span> +<span class="normal">264</span> +<span class="normal">265</span> +<span class="normal">266</span> +<span class="normal">267</span> +<span class="normal">268</span> +<span class="normal">269</span> +<span class="normal">270</span> +<span class="normal">271</span> +<span class="normal">272</span> +<span class="normal">273</span> +<span class="normal">274</span> +<span class="normal">275</span> +<span class="normal">276</span> +<span class="normal">277</span> +<span class="normal">278</span> +<span class="normal">279</span> +<span class="normal">280</span> +<span class="normal">281</span> +<span class="normal">282</span> +<span class="normal">283</span> +<span class="normal">284</span> +<span class="normal">285</span> +<span class="normal">286</span> +<span class="normal">287</span> +<span class="normal">288</span> +<span class="normal">289</span> +<span class="normal">290</span> +<span class="normal">291</span> +<span class="normal">292</span> +<span class="normal">293</span> +<span class="normal">294</span> +<span class="normal">295</span> +<span class="normal">296</span> +<span class="normal">297</span> +<span class="normal">298</span> +<span class="normal">299</span> +<span class="normal">300</span> +<span class="normal">301</span> +<span class="normal">302</span> +<span class="normal">303</span> +<span class="normal">304</span> +<span class="normal">305</span> +<span class="normal">306</span> +<span class="normal">307</span> +<span class="normal">308</span> +<span class="normal">309</span> +<span class="normal">310</span> +<span class="normal">311</span> +<span class="normal">312</span> +<span class="normal">313</span> +<span class="normal">314</span> +<span class="normal">315</span> +<span class="normal">316</span> +<span class="normal">317</span> +<span class="normal">318</span> +<span class="normal">319</span> +<span class="normal">320</span> +<span class="normal">321</span> +<span class="normal">322</span> +<span class="normal">323</span> +<span class="normal">324</span> +<span class="normal">325</span> +<span class="normal">326</span> +<span class="normal">327</span> +<span class="normal">328</span> +<span class="normal">329</span> +<span class="normal">330</span> +<span class="normal">331</span> +<span class="normal">332</span> +<span class="normal">333</span> +<span class="normal">334</span> +<span class="normal">335</span> +<span class="normal">336</span> +<span class="normal">337</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * caja-dropbox-hooks.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Implements connection handling and C interface for the Dropbox hook socket.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span><span class="error2"><--- Include file: <sys/types.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-25" name="line-25"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/socket.h></span><span class="error2"><--- Include file: <sys/socket.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-26" name="line-26"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/un.h></span><span class="error2"><--- Include file: <sys/un.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-27" name="line-27"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><errno.h></span><span class="error2"><--- Include file: <errno.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-28" name="line-28"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><unistd.h></span><span class="error2"><--- Include file: <unistd.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-29" name="line-29"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><fcntl.h></span><span class="error2"><--- Include file: <fcntl.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-30" name="line-30"></a> +<a id="line-31" name="line-31"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><string.h></span><span class="error2"><--- Include file: <string.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-32" name="line-32"></a> +<a id="line-33" name="line-33"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="error2"><--- Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-34" name="line-34"></a> +<a id="line-35" name="line-35"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"g-util.h"</span> +<a id="line-36" name="line-36"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"async-io-coroutine.h"</span> +<a id="line-37" name="line-37"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-client-util.h"</span> +<a id="line-38" name="line-38"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span> +<a id="line-39" name="line-39"></a> +<a id="line-40" name="line-40"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-41" name="line-41"></a><span class="w"> </span><span class="n">DropboxUpdateHook</span><span class="w"> </span><span class="n">hook</span><span class="p">;</span> +<a id="line-42" name="line-42"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-43" name="line-43"></a><span class="p">}</span><span class="w"> </span><span class="n">HookData</span><span class="p">;</span> +<a id="line-44" name="line-44"></a> +<a id="line-45" name="line-45"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span> +<a id="line-46" name="line-46"></a><span class="nf">try_to_connect</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">);</span> +<a id="line-47" name="line-47"></a> +<a id="line-48" name="line-48"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span> +<a id="line-49" name="line-49"></a><span class="nf">handle_hook_server_input</span><span class="p">(</span><span class="n">GIOChannel</span><span class="w"> </span><span class="o">*</span><span class="n">chan</span><span class="p">,</span> +<a id="line-50" name="line-50"></a><span class="w"> </span><span class="n">GIOCondition</span><span class="w"> </span><span class="n">cond</span><span class="p">,</span> +<a id="line-51" name="line-51"></a><span class="w"> </span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-52" name="line-52"></a><span class="w"> </span><span class="cm">/*debug_enter(); */</span> +<a id="line-53" name="line-53"></a> +<a id="line-54" name="line-54"></a><span class="w"> </span><span class="cm">/* we have some sweet macros defined that allow us to write this</span> +<a id="line-55" name="line-55"></a><span class="cm"> async event handler like a microthread yeahh, watch out for context */</span> +<a id="line-56" name="line-56"></a><span class="w"> </span><span class="n">CRBEGIN</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span><span class="p">);</span> +<a id="line-57" name="line-57"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-58" name="line-58"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span> +<a id="line-59" name="line-59"></a><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-60" name="line-60"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-61" name="line-61"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span> +<a id="line-62" name="line-62"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span> +<a id="line-63" name="line-63"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-64" name="line-64"></a> +<a id="line-65" name="line-65"></a><span class="w"> </span><span class="cm">/* read the command name */</span> +<a id="line-66" name="line-66"></a><span class="w"> </span><span class="p">{</span> +<a id="line-67" name="line-67"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">line</span><span class="p">;</span> +<a id="line-68" name="line-68"></a><span class="w"> </span><span class="n">CRREADLINE</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span><span class="p">,</span><span class="w"> </span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">line</span><span class="p">);</span> +<a id="line-69" name="line-69"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dropbox_client_util_desanitize</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-70" name="line-70"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-71" name="line-71"></a><span class="w"> </span><span class="p">}</span> +<a id="line-72" name="line-72"></a> +<a id="line-73" name="line-73"></a><span class="w"> </span><span class="cm">/*debug("got a hook name: %s", hookserv->hhsi.command_name); */</span> +<a id="line-74" name="line-74"></a> +<a id="line-75" name="line-75"></a><span class="w"> </span><span class="cm">/* now read each arg line (until a certain limit) until we receive "done" */</span> +<a id="line-76" name="line-76"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-77" name="line-77"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">line</span><span class="p">;</span> +<a id="line-78" name="line-78"></a> +<a id="line-79" name="line-79"></a><span class="w"> </span><span class="cm">/* if too many arguments, this connection seems malicious */</span> +<a id="line-80" name="line-80"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="mi">20</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-81" name="line-81"></a><span class="w"> </span><span class="n">CRHALT</span><span class="p">;</span> +<a id="line-82" name="line-82"></a><span class="w"> </span><span class="p">}</span> +<a id="line-83" name="line-83"></a> +<a id="line-84" name="line-84"></a><span class="w"> </span><span class="n">CRREADLINE</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span><span class="p">,</span><span class="w"> </span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">line</span><span class="p">);</span> +<a id="line-85" name="line-85"></a> +<a id="line-86" name="line-86"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"done"</span><span class="p">,</span><span class="w"> </span><span class="n">line</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-87" name="line-87"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-88" name="line-88"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-89" name="line-89"></a><span class="w"> </span><span class="p">}</span> +<a id="line-90" name="line-90"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-91" name="line-91"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">parse_result</span><span class="p">;</span> +<a id="line-92" name="line-92"></a> +<a id="line-93" name="line-93"></a><span class="w"> </span><span class="n">parse_result</span><span class="w"> </span><span class="o">=</span> +<a id="line-94" name="line-94"></a><span class="w"> </span><span class="n">dropbox_client_util_command_parse_arg</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> +<a id="line-95" name="line-95"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">);</span> +<a id="line-96" name="line-96"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-97" name="line-97"></a> +<a id="line-98" name="line-98"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">FALSE</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">parse_result</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-99" name="line-99"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"bad parse"</span><span class="p">);</span> +<a id="line-100" name="line-100"></a><span class="w"> </span><span class="n">CRHALT</span><span class="p">;</span> +<a id="line-101" name="line-101"></a><span class="w"> </span><span class="p">}</span> +<a id="line-102" name="line-102"></a><span class="w"> </span><span class="p">}</span> +<a id="line-103" name="line-103"></a> +<a id="line-104" name="line-104"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> +<a id="line-105" name="line-105"></a><span class="w"> </span><span class="p">}</span> +<a id="line-106" name="line-106"></a> +<a id="line-107" name="line-107"></a><span class="w"> </span><span class="p">{</span> +<a id="line-108" name="line-108"></a><span class="w"> </span><span class="n">HookData</span><span class="w"> </span><span class="o">*</span><span class="n">hd</span><span class="p">;</span> +<a id="line-109" name="line-109"></a><span class="w"> </span><span class="n">hd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">HookData</span><span class="w"> </span><span class="o">*</span><span class="p">)</span> +<a id="line-110" name="line-110"></a><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">dispatch_table</span><span class="p">,</span> +<a id="line-111" name="line-111"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="p">);</span> +<a id="line-112" name="line-112"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hd</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-113" name="line-113"></a><span class="w"> </span><span class="p">(</span><span class="n">hd</span><span class="o">-></span><span class="n">hook</span><span class="p">)(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">hd</span><span class="o">-></span><span class="n">ud</span><span class="p">);</span> +<a id="line-114" name="line-114"></a><span class="w"> </span><span class="p">}</span> +<a id="line-115" name="line-115"></a><span class="w"> </span><span class="p">}</span> +<a id="line-116" name="line-116"></a> +<a id="line-117" name="line-117"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="p">);</span> +<a id="line-118" name="line-118"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">);</span> +<a id="line-119" name="line-119"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-120" name="line-120"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-121" name="line-121"></a><span class="w"> </span><span class="p">}</span> +<a id="line-122" name="line-122"></a><span class="w"> </span><span class="n">CREND</span><span class="p">;</span> +<a id="line-123" name="line-123"></a><span class="p">}</span> +<a id="line-124" name="line-124"></a> +<a id="line-125" name="line-125"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-126" name="line-126"></a><span class="nf">watch_killer</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-127" name="line-127"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"hook client disconnected"</span><span class="p">);</span> +<a id="line-128" name="line-128"></a> +<a id="line-129" name="line-129"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-130" name="line-130"></a> +<a id="line-131" name="line-131"></a><span class="w"> </span><span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span> +<a id="line-132" name="line-132"></a> +<a id="line-133" name="line-133"></a><span class="w"> </span><span class="cm">/* we basically just have to free the memory allocated in the</span> +<a id="line-134" name="line-134"></a><span class="cm"> handle_hook_server_init ctx */</span> +<a id="line-135" name="line-135"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-136" name="line-136"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="p">);</span> +<a id="line-137" name="line-137"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-138" name="line-138"></a><span class="w"> </span><span class="p">}</span> +<a id="line-139" name="line-139"></a> +<a id="line-140" name="line-140"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-141" name="line-141"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="p">);</span> +<a id="line-142" name="line-142"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-143" name="line-143"></a><span class="w"> </span><span class="p">}</span> +<a id="line-144" name="line-144"></a> +<a id="line-145" name="line-145"></a><span class="w"> </span><span class="n">g_io_channel_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">);</span> +<a id="line-146" name="line-146"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-147" name="line-147"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-148" name="line-148"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-149" name="line-149"></a> +<a id="line-150" name="line-150"></a><span class="w"> </span><span class="cm">/* lol we also have to start a new connection */</span> +<a id="line-151" name="line-151"></a><span class="w"> </span><span class="n">try_to_connect</span><span class="p">(</span><span class="n">hookserv</span><span class="p">);</span> +<a id="line-152" name="line-152"></a><span class="p">}</span> +<a id="line-153" name="line-153"></a> +<a id="line-154" name="line-154"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span> +<a id="line-155" name="line-155"></a><span class="nf">try_to_connect</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-156" name="line-156"></a><span class="w"> </span><span class="cm">/* create socket */</span> +<a id="line-157" name="line-157"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">socket</span><span class="p">(</span><span class="n">PF_UNIX</span><span class="p">,</span><span class="w"> </span><span class="n">SOCK_STREAM</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span> +<a id="line-158" name="line-158"></a> +<a id="line-159" name="line-159"></a><span class="w"> </span><span class="cm">/* set native non-blocking, for connect timeout */</span> +<a id="line-160" name="line-160"></a><span class="w"> </span><span class="p">{</span> +<a id="line-161" name="line-161"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">flags</span><span class="p">;</span> +<a id="line-162" name="line-162"></a> +<a id="line-163" name="line-163"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">flags</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fcntl</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span><span class="w"> </span><span class="n">F_GETFL</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-164" name="line-164"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a id="line-165" name="line-165"></a><span class="w"> </span><span class="p">}</span> +<a id="line-166" name="line-166"></a> +<a id="line-167" name="line-167"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">fcntl</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span><span class="w"> </span><span class="n">F_SETFL</span><span class="p">,</span><span class="w"> </span><span class="n">flags</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">O_NONBLOCK</span><span class="p">)</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-168" name="line-168"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a id="line-169" name="line-169"></a><span class="w"> </span><span class="p">}</span> +<a id="line-170" name="line-170"></a><span class="w"> </span><span class="p">}</span> +<a id="line-171" name="line-171"></a> +<a id="line-172" name="line-172"></a><span class="w"> </span><span class="cm">/* connect to server, might fail of course */</span> +<a id="line-173" name="line-173"></a><span class="w"> </span><span class="p">{</span> +<a id="line-174" name="line-174"></a><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">sockaddr_un</span><span class="w"> </span><span class="n">addr</span><span class="p">;</span> +<a id="line-175" name="line-175"></a><span class="w"> </span><span class="kt">socklen_t</span><span class="w"> </span><span class="n">addr_len</span><span class="p">;</span> +<a id="line-176" name="line-176"></a> +<a id="line-177" name="line-177"></a><span class="w"> </span><span class="cm">/* intialize address structure */</span> +<a id="line-178" name="line-178"></a><span class="w"> </span><span class="n">addr</span><span class="p">.</span><span class="n">sun_family</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AF_UNIX</span><span class="p">;</span> +<a id="line-179" name="line-179"></a><span class="w"> </span><span class="n">g_snprintf</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">,</span> +<a id="line-180" name="line-180"></a><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">),</span> +<a id="line-181" name="line-181"></a><span class="w"> </span><span class="s">"%s/.dropbox/iface_socket"</span><span class="p">,</span> +<a id="line-182" name="line-182"></a><span class="w"> </span><span class="n">g_get_home_dir</span><span class="p">());</span> +<a id="line-183" name="line-183"></a><span class="w"> </span><span class="n">addr_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">);</span> +<a id="line-184" name="line-184"></a> +<a id="line-185" name="line-185"></a><span class="w"> </span><span class="cm">/* if there was an error we have to try again later */</span> +<a id="line-186" name="line-186"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">connect</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">sockaddr</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="o">&</span><span class="n">addr</span><span class="p">,</span><span class="w"> </span><span class="n">addr_len</span><span class="p">)</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-187" name="line-187"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">errno</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">EINPROGRESS</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-188" name="line-188"></a><span class="w"> </span><span class="n">fd_set</span><span class="w"> </span><span class="n">writers</span><span class="p">;</span> +<a id="line-189" name="line-189"></a><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">timeval</span><span class="w"> </span><span class="n">tv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">};</span> +<a id="line-190" name="line-190"></a><span class="w"> </span><span class="n">FD_ZERO</span><span class="p">(</span><span class="o">&</span><span class="n">writers</span><span class="p">);</span> +<a id="line-191" name="line-191"></a><span class="w"> </span><span class="n">FD_SET</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">writers</span><span class="p">);</span> +<a id="line-192" name="line-192"></a> +<a id="line-193" name="line-193"></a><span class="w"> </span><span class="cm">/* if nothing was ready after 3 seconds, fail out homie */</span> +<a id="line-194" name="line-194"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">select</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">writers</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tv</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-195" name="line-195"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a id="line-196" name="line-196"></a><span class="w"> </span><span class="p">}</span> +<a id="line-197" name="line-197"></a> +<a id="line-198" name="line-198"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">connect</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">sockaddr</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="o">&</span><span class="n">addr</span><span class="p">,</span><span class="w"> </span><span class="n">addr_len</span><span class="p">)</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-199" name="line-199"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"couldn't connect to hook server after 1 second"</span><span class="p">);</span> +<a id="line-200" name="line-200"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a id="line-201" name="line-201"></a><span class="w"> </span><span class="p">}</span> +<a id="line-202" name="line-202"></a><span class="w"> </span><span class="p">}</span> +<a id="line-203" name="line-203"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-204" name="line-204"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">FAIL_CLEANUP</span><span class="p">;</span> +<a id="line-205" name="line-205"></a><span class="w"> </span><span class="p">}</span> +<a id="line-206" name="line-206"></a><span class="w"> </span><span class="p">}</span> +<a id="line-207" name="line-207"></a><span class="w"> </span><span class="p">}</span> +<a id="line-208" name="line-208"></a> +<a id="line-209" name="line-209"></a><span class="w"> </span><span class="cm">/* lol sometimes i write funny codez */</span> +<a id="line-210" name="line-210"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">FALSE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-211" name="line-211"></a><span class="w"> </span><span class="nl">FAIL_CLEANUP</span><span class="p">:</span> +<a id="line-212" name="line-212"></a><span class="w"> </span><span class="n">close</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">);</span> +<a id="line-213" name="line-213"></a><span class="w"> </span><span class="n">g_timeout_add_seconds</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">try_to_connect</span><span class="p">,</span><span class="w"> </span><span class="n">hookserv</span><span class="p">);</span> +<a id="line-214" name="line-214"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-215" name="line-215"></a><span class="w"> </span><span class="p">}</span> +<a id="line-216" name="line-216"></a> +<a id="line-217" name="line-217"></a><span class="w"> </span><span class="cm">/* great we connected!, let's create the channel and wait on it */</span> +<a id="line-218" name="line-218"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_unix_new</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">socket</span><span class="p">);</span> +<a id="line-219" name="line-219"></a><span class="w"> </span><span class="n">g_io_channel_set_line_term</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span> +<a id="line-220" name="line-220"></a><span class="w"> </span><span class="n">g_io_channel_set_close_on_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span> +<a id="line-221" name="line-221"></a> +<a id="line-222" name="line-222"></a><span class="w"> </span><span class="cm">/*debug("create channel"); */</span> +<a id="line-223" name="line-223"></a> +<a id="line-224" name="line-224"></a><span class="w"> </span><span class="cm">/* Set non-blocking ;) (again just in case) */</span> +<a id="line-225" name="line-225"></a><span class="w"> </span><span class="p">{</span> +<a id="line-226" name="line-226"></a><span class="w"> </span><span class="n">GIOFlags</span><span class="w"> </span><span class="n">flags</span><span class="p">;</span> +<a id="line-227" name="line-227"></a><span class="w"> </span><span class="n">GIOStatus</span><span class="w"> </span><span class="n">iostat</span><span class="p">;</span> +<a id="line-228" name="line-228"></a> +<a id="line-229" name="line-229"></a><span class="w"> </span><span class="n">flags</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_get_flags</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">);</span> +<a id="line-230" name="line-230"></a><span class="w"> </span><span class="n">iostat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_set_flags</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">flags</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">G_IO_FLAG_NONBLOCK</span><span class="p">,</span> +<a id="line-231" name="line-231"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-232" name="line-232"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">iostat</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_ERROR</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-233" name="line-233"></a><span class="w"> </span><span class="n">g_io_channel_unref</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">);</span> +<a id="line-234" name="line-234"></a><span class="w"> </span><span class="n">g_timeout_add_seconds</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">try_to_connect</span><span class="p">,</span><span class="w"> </span><span class="n">hookserv</span><span class="p">);</span> +<a id="line-235" name="line-235"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-236" name="line-236"></a><span class="w"> </span><span class="p">}</span> +<a id="line-237" name="line-237"></a><span class="w"> </span><span class="p">}</span> +<a id="line-238" name="line-238"></a> +<a id="line-239" name="line-239"></a><span class="w"> </span><span class="cm">/*debug("set non blocking"); */</span> +<a id="line-240" name="line-240"></a> +<a id="line-241" name="line-241"></a><span class="w"> </span><span class="cm">/* this is fun, async io watcher */</span> +<a id="line-242" name="line-242"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">line</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-243" name="line-243"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-244" name="line-244"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">hhsi</span><span class="p">.</span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-245" name="line-245"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span><span class="w"> </span><span class="o">=</span> +<a id="line-246" name="line-246"></a><span class="w"> </span><span class="n">g_io_add_watch_full</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">G_PRIORITY_DEFAULT</span><span class="p">,</span> +<a id="line-247" name="line-247"></a><span class="w"> </span><span class="n">G_IO_IN</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">G_IO_PRI</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">G_IO_ERR</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">G_IO_HUP</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">G_IO_NVAL</span><span class="p">,</span> +<a id="line-248" name="line-248"></a><span class="w"> </span><span class="p">(</span><span class="n">GIOFunc</span><span class="p">)</span><span class="w"> </span><span class="n">handle_hook_server_input</span><span class="p">,</span><span class="w"> </span><span class="n">hookserv</span><span class="p">,</span> +<a id="line-249" name="line-249"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">watch_killer</span><span class="p">);</span> +<a id="line-250" name="line-250"></a> +<a id="line-251" name="line-251"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"hook client connected"</span><span class="p">);</span> +<a id="line-252" name="line-252"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-253" name="line-253"></a><span class="w"> </span><span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span> +<a id="line-254" name="line-254"></a> +<a id="line-255" name="line-255"></a><span class="w"> </span><span class="cm">/*debug("added watch");*/</span> +<a id="line-256" name="line-256"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-257" name="line-257"></a><span class="p">}</span> +<a id="line-258" name="line-258"></a> +<a id="line-259" name="line-259"></a><span class="cm">/* should only be called in glib main loop */</span> +<a id="line-260" name="line-260"></a><span class="cm">/* returns a gboolean because it is a GSourceFunc */</span> +<a id="line-261" name="line-261"></a><span class="n">gboolean</span><span class="w"> </span><span class="nf">caja_dropbox_hooks_force_reconnect</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-262" name="line-262"></a><span class="w"> </span><span class="n">debug_enter</span><span class="p">();</span> +<a id="line-263" name="line-263"></a> +<a id="line-264" name="line-264"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-265" name="line-265"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-266" name="line-266"></a><span class="w"> </span><span class="p">}</span> +<a id="line-267" name="line-267"></a> +<a id="line-268" name="line-268"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"forcing hook to reconnect"</span><span class="p">);</span> +<a id="line-269" name="line-269"></a> +<a id="line-270" name="line-270"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span> +<a id="line-271" name="line-271"></a> +<a id="line-272" name="line-272"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-273" name="line-273"></a><span class="w"> </span><span class="n">g_source_remove</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span><span class="p">);</span> +<a id="line-274" name="line-274"></a><span class="w"> </span><span class="p">}</span> +<a id="line-275" name="line-275"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">event_source</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-276" name="line-276"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"event source was zero!!!!!"</span><span class="p">);</span> +<a id="line-277" name="line-277"></a><span class="w"> </span><span class="p">}</span> +<a id="line-278" name="line-278"></a> +<a id="line-279" name="line-279"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-280" name="line-280"></a><span class="p">}</span> +<a id="line-281" name="line-281"></a> +<a id="line-282" name="line-282"></a><span class="n">gboolean</span> +<a id="line-283" name="line-283"></a><span class="hll"><span class="nf">caja_dropbox_hooks_is_connected</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="error2"><--- Parameter 'hookserv' can be declared as pointer to const</span> +</span><a id="line-284" name="line-284"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span><span class="p">;</span> +<a id="line-285" name="line-285"></a><span class="p">}</span> +<a id="line-286" name="line-286"></a> +<a id="line-287" name="line-287"></a><span class="kt">void</span> +<a id="line-288" name="line-288"></a><span class="nf">caja_dropbox_hooks_setup</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-289" name="line-289"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">dispatch_table</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-290" name="line-290"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-291" name="line-291"></a><span class="w"> </span><span class="n">g_free</span><span class="p">,</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span> +<a id="line-292" name="line-292"></a><span class="w"> </span><span class="n">hookserv</span><span class="o">-></span><span class="n">connected</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-293" name="line-293"></a> +<a id="line-294" name="line-294"></a><span class="w"> </span><span class="n">g_hook_list_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">GHook</span><span class="p">));</span> +<a id="line-295" name="line-295"></a><span class="w"> </span><span class="n">g_hook_list_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">GHook</span><span class="p">));</span> +<a id="line-296" name="line-296"></a><span class="p">}</span> +<a id="line-297" name="line-297"></a> +<a id="line-298" name="line-298"></a><span class="kt">void</span> +<a id="line-299" name="line-299"></a><span class="nf">caja_dropbox_hooks_add_on_disconnect_hook</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">,</span> +<a id="line-300" name="line-300"></a><span class="w"> </span><span class="n">DropboxHookClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-301" name="line-301"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-302" name="line-302"></a><span class="w"> </span><span class="n">GHook</span><span class="w"> </span><span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a id="line-303" name="line-303"></a> +<a id="line-304" name="line-304"></a><span class="w"> </span><span class="n">newhook</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hook_alloc</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">));</span> +<a id="line-305" name="line-305"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dhcch</span><span class="p">;</span> +<a id="line-306" name="line-306"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-307" name="line-307"></a> +<a id="line-308" name="line-308"></a><span class="w"> </span><span class="n">g_hook_append</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">newhook</span><span class="p">);</span> +<a id="line-309" name="line-309"></a><span class="p">}</span> +<a id="line-310" name="line-310"></a> +<a id="line-311" name="line-311"></a><span class="kt">void</span> +<a id="line-312" name="line-312"></a><span class="nf">caja_dropbox_hooks_add_on_connect_hook</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">,</span> +<a id="line-313" name="line-313"></a><span class="w"> </span><span class="n">DropboxHookClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-314" name="line-314"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-315" name="line-315"></a><span class="w"> </span><span class="n">GHook</span><span class="w"> </span><span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a id="line-316" name="line-316"></a> +<a id="line-317" name="line-317"></a><span class="w"> </span><span class="n">newhook</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hook_alloc</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">));</span> +<a id="line-318" name="line-318"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dhcch</span><span class="p">;</span> +<a id="line-319" name="line-319"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-320" name="line-320"></a> +<a id="line-321" name="line-321"></a><span class="w"> </span><span class="n">g_hook_append</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">newhook</span><span class="p">);</span> +<a id="line-322" name="line-322"></a><span class="p">}</span> +<a id="line-323" name="line-323"></a> +<a id="line-324" name="line-324"></a><span class="kt">void</span><span class="w"> </span><span class="nf">caja_dropbox_hooks_add</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">ndhs</span><span class="p">,</span> +<a id="line-325" name="line-325"></a><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">hook_name</span><span class="p">,</span> +<a id="line-326" name="line-326"></a><span class="w"> </span><span class="n">DropboxUpdateHook</span><span class="w"> </span><span class="n">hook</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-327" name="line-327"></a><span class="w"> </span><span class="n">HookData</span><span class="w"> </span><span class="o">*</span><span class="n">hd</span><span class="p">;</span> +<a id="line-328" name="line-328"></a><span class="w"> </span><span class="n">hd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">HookData</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-329" name="line-329"></a><span class="w"> </span><span class="n">hd</span><span class="o">-></span><span class="n">hook</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hook</span><span class="p">;</span> +<a id="line-330" name="line-330"></a><span class="w"> </span><span class="n">hd</span><span class="o">-></span><span class="n">ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-331" name="line-331"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">ndhs</span><span class="o">-></span><span class="n">dispatch_table</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">hook_name</span><span class="p">),</span><span class="w"> </span><span class="n">hd</span><span class="p">);</span> +<a id="line-332" name="line-332"></a><span class="p">}</span> +<a id="line-333" name="line-333"></a> +<a id="line-334" name="line-334"></a><span class="kt">void</span> +<a id="line-335" name="line-335"></a><span class="nf">caja_dropbox_hooks_start</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-336" name="line-336"></a><span class="w"> </span><span class="n">try_to_connect</span><span class="p">(</span><span class="n">hookserv</span><span class="p">);</span> +<a id="line-337" name="line-337"></a><span class="p">}</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/1.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/1.html new file mode 100644 index 0000000..7709acb --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/1.html @@ -0,0 +1,335 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/g-util.h</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> g-util.h</p> +<a href="1.html#line-27"> missingIncludeSystem 27</a><a href="1.html#line-28"> missingIncludeSystem 28</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal">10</span> +<span class="normal">11</span> +<span class="normal">12</span> +<span class="normal">13</span> +<span class="normal">14</span> +<span class="normal">15</span> +<span class="normal">16</span> +<span class="normal">17</span> +<span class="normal">18</span> +<span class="normal">19</span> +<span class="normal">20</span> +<span class="normal">21</span> +<span class="normal">22</span> +<span class="normal">23</span> +<span class="normal">24</span> +<span class="normal">25</span> +<span class="normal">26</span> +<span class="normal">27</span> +<span class="normal">28</span> +<span class="normal">29</span> +<span class="normal">30</span> +<span class="normal">31</span> +<span class="normal">32</span> +<span class="normal">33</span> +<span class="normal">34</span> +<span class="normal">35</span> +<span class="normal">36</span> +<span class="normal">37</span> +<span class="normal">38</span> +<span class="normal">39</span> +<span class="normal">40</span> +<span class="normal">41</span> +<span class="normal">42</span> +<span class="normal">43</span> +<span class="normal">44</span> +<span class="normal">45</span> +<span class="normal">46</span> +<span class="normal">47</span> +<span class="normal">48</span> +<span class="normal">49</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * g-util.h</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Helper macros.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifndef G_UTIL_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#define G_UTIL_H</span> +<a id="line-26" name="line-26"></a> +<a id="line-27" name="line-27"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="error2"><--- Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-28" name="line-28"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib/gprintf.h></span><span class="error2"><--- Include file: <glib/gprintf.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-29" name="line-29"></a> +<a id="line-30" name="line-30"></a><span class="n">G_BEGIN_DECLS</span> +<a id="line-31" name="line-31"></a> +<a id="line-32" name="line-32"></a><span class="cp">#ifdef ND_DEBUG</span> +<a id="line-33" name="line-33"></a> +<a id="line-34" name="line-34"></a><span class="cp">#define debug_enter() {g_print("Entering "); g_print(__FUNCTION__); g_printf("\n");}</span> +<a id="line-35" name="line-35"></a><span class="cp">#define debug(format, ...) {g_print(__FUNCTION__); g_print(": "); \</span> +<a id="line-36" name="line-36"></a><span class="cp"> g_printf(format, ## __VA_ARGS__); g_print("\n");}</span> +<a id="line-37" name="line-37"></a><span class="cp">#define debug_return(v) {g_print("Exiting "); g_print(__FUNCTION__); g_printf("\n"); return v;}</span> +<a id="line-38" name="line-38"></a> +<a id="line-39" name="line-39"></a><span class="cp">#else</span> +<a id="line-40" name="line-40"></a> +<a id="line-41" name="line-41"></a><span class="cp">#define debug_enter() do {} while(0)</span> +<a id="line-42" name="line-42"></a><span class="cp">#define debug(format, ...) do {} while(0)</span> +<a id="line-43" name="line-43"></a><span class="cp">#define debug_return(v) do {} while(0)</span> +<a id="line-44" name="line-44"></a> +<a id="line-45" name="line-45"></a><span class="cp">#endif</span> +<a id="line-46" name="line-46"></a> +<a id="line-47" name="line-47"></a><span class="n">G_END_DECLS</span> +<a id="line-48" name="line-48"></a> +<a id="line-49" name="line-49"></a><span class="cp">#endif</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/10.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/10.html new file mode 100644 index 0000000..12dd722 --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/10.html @@ -0,0 +1,1983 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/dropbox-command-client.c</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> dropbox-command-client.c</p> +<a href="10.html#line-24"> missingIncludeSystem 24</a><a href="10.html#line-25"> missingIncludeSystem 25</a><a href="10.html#line-26"> missingIncludeSystem 26</a><a href="10.html#line-27"> missingIncludeSystem 27</a><a href="10.html#line-28"> missingIncludeSystem 28</a><a href="10.html#line-29"> missingIncludeSystem 29</a><a href="10.html#line-31"> missingIncludeSystem 31</a><a href="10.html#line-32"> missingIncludeSystem 32</a><a href="10.html#line-34"> missingIncludeSystem 34</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span> +<span class="normal">114</span> +<span class="normal">115</span> +<span class="normal">116</span> +<span class="normal">117</span> +<span class="normal">118</span> +<span class="normal">119</span> +<span class="normal">120</span> +<span class="normal">121</span> +<span class="normal">122</span> +<span class="normal">123</span> +<span class="normal">124</span> +<span class="normal">125</span> +<span class="normal">126</span> +<span class="normal">127</span> +<span class="normal">128</span> +<span class="normal">129</span> +<span class="normal">130</span> +<span class="normal">131</span> +<span class="normal">132</span> +<span class="normal">133</span> +<span class="normal">134</span> +<span class="normal">135</span> +<span class="normal">136</span> +<span class="normal">137</span> +<span class="normal">138</span> +<span class="normal">139</span> +<span class="normal">140</span> +<span class="normal">141</span> +<span class="normal">142</span> +<span class="normal">143</span> +<span class="normal">144</span> +<span class="normal">145</span> +<span class="normal">146</span> +<span class="normal">147</span> +<span class="normal">148</span> +<span class="normal">149</span> +<span class="normal">150</span> +<span class="normal">151</span> +<span class="normal">152</span> +<span class="normal">153</span> +<span class="normal">154</span> +<span class="normal">155</span> +<span class="normal">156</span> +<span class="normal">157</span> +<span class="normal">158</span> +<span class="normal">159</span> +<span class="normal">160</span> +<span class="normal">161</span> +<span class="normal">162</span> +<span class="normal">163</span> +<span class="normal">164</span> +<span class="normal">165</span> +<span class="normal">166</span> +<span class="normal">167</span> +<span class="normal">168</span> +<span class="normal">169</span> +<span class="normal">170</span> +<span class="normal">171</span> +<span class="normal">172</span> +<span class="normal">173</span> +<span class="normal">174</span> +<span class="normal">175</span> +<span class="normal">176</span> +<span class="normal">177</span> +<span class="normal">178</span> +<span class="normal">179</span> +<span class="normal">180</span> +<span class="normal">181</span> +<span class="normal">182</span> +<span class="normal">183</span> +<span class="normal">184</span> +<span class="normal">185</span> +<span class="normal">186</span> +<span class="normal">187</span> +<span class="normal">188</span> +<span class="normal">189</span> +<span class="normal">190</span> +<span class="normal">191</span> +<span class="normal">192</span> +<span class="normal">193</span> +<span class="normal">194</span> +<span class="normal">195</span> +<span class="normal">196</span> +<span class="normal">197</span> +<span class="normal">198</span> +<span class="normal">199</span> +<span class="normal">200</span> +<span class="normal">201</span> +<span class="normal">202</span> +<span class="normal">203</span> +<span class="normal">204</span> +<span class="normal">205</span> +<span class="normal">206</span> +<span class="normal">207</span> +<span class="normal">208</span> +<span class="normal">209</span> +<span class="normal">210</span> +<span class="normal">211</span> +<span class="normal">212</span> +<span class="normal">213</span> +<span class="normal">214</span> +<span class="normal">215</span> +<span class="normal">216</span> +<span class="normal">217</span> +<span class="normal">218</span> +<span class="normal">219</span> +<span class="normal">220</span> +<span class="normal">221</span> +<span class="normal">222</span> +<span class="normal">223</span> +<span class="normal">224</span> +<span class="normal">225</span> +<span class="normal">226</span> +<span class="normal">227</span> +<span class="normal">228</span> +<span class="normal">229</span> +<span class="normal">230</span> +<span class="normal">231</span> +<span class="normal">232</span> +<span class="normal">233</span> +<span class="normal">234</span> +<span class="normal">235</span> +<span class="normal">236</span> +<span class="normal">237</span> +<span class="normal">238</span> +<span class="normal">239</span> +<span class="normal">240</span> +<span class="normal">241</span> +<span class="normal">242</span> +<span class="normal">243</span> +<span class="normal">244</span> +<span class="normal">245</span> +<span class="normal">246</span> +<span class="normal">247</span> +<span class="normal">248</span> +<span class="normal">249</span> +<span class="normal">250</span> +<span class="normal">251</span> +<span class="normal">252</span> +<span class="normal">253</span> +<span class="normal">254</span> +<span class="normal">255</span> +<span class="normal">256</span> +<span class="normal">257</span> +<span class="normal">258</span> +<span class="normal">259</span> +<span class="normal">260</span> +<span class="normal">261</span> +<span class="normal">262</span> +<span class="normal">263</span> +<span class="normal">264</span> +<span class="normal">265</span> +<span class="normal">266</span> +<span class="normal">267</span> +<span class="normal">268</span> +<span class="normal">269</span> +<span class="normal">270</span> +<span class="normal">271</span> +<span class="normal">272</span> +<span class="normal">273</span> +<span class="normal">274</span> +<span class="normal">275</span> +<span class="normal">276</span> +<span class="normal">277</span> +<span class="normal">278</span> +<span class="normal">279</span> +<span class="normal">280</span> +<span class="normal">281</span> +<span class="normal">282</span> +<span class="normal">283</span> +<span class="normal">284</span> +<span class="normal">285</span> +<span class="normal">286</span> +<span class="normal">287</span> +<span class="normal">288</span> +<span class="normal">289</span> +<span class="normal">290</span> +<span class="normal">291</span> +<span class="normal">292</span> +<span class="normal">293</span> +<span class="normal">294</span> +<span class="normal">295</span> +<span class="normal">296</span> +<span class="normal">297</span> +<span class="normal">298</span> +<span class="normal">299</span> +<span class="normal">300</span> +<span class="normal">301</span> +<span class="normal">302</span> +<span class="normal">303</span> +<span class="normal">304</span> +<span class="normal">305</span> +<span class="normal">306</span> +<span class="normal">307</span> +<span class="normal">308</span> +<span class="normal">309</span> +<span class="normal">310</span> +<span class="normal">311</span> +<span class="normal">312</span> +<span class="normal">313</span> +<span class="normal">314</span> +<span class="normal">315</span> +<span class="normal">316</span> +<span class="normal">317</span> +<span class="normal">318</span> +<span class="normal">319</span> +<span class="normal">320</span> +<span class="normal">321</span> +<span class="normal">322</span> +<span class="normal">323</span> +<span class="normal">324</span> +<span class="normal">325</span> +<span class="normal">326</span> +<span class="normal">327</span> +<span class="normal">328</span> +<span class="normal">329</span> +<span class="normal">330</span> +<span class="normal">331</span> +<span class="normal">332</span> +<span class="normal">333</span> +<span class="normal">334</span> +<span class="normal">335</span> +<span class="normal">336</span> +<span class="normal">337</span> +<span class="normal">338</span> +<span class="normal">339</span> +<span class="normal">340</span> +<span class="normal">341</span> +<span class="normal">342</span> +<span class="normal">343</span> +<span class="normal">344</span> +<span class="normal">345</span> +<span class="normal">346</span> +<span class="normal">347</span> +<span class="normal">348</span> +<span class="normal">349</span> +<span class="normal">350</span> +<span class="normal">351</span> +<span class="normal">352</span> +<span class="normal">353</span> +<span class="normal">354</span> +<span class="normal">355</span> +<span class="normal">356</span> +<span class="normal">357</span> +<span class="normal">358</span> +<span class="normal">359</span> +<span class="normal">360</span> +<span class="normal">361</span> +<span class="normal">362</span> +<span class="normal">363</span> +<span class="normal">364</span> +<span class="normal">365</span> +<span class="normal">366</span> +<span class="normal">367</span> +<span class="normal">368</span> +<span class="normal">369</span> +<span class="normal">370</span> +<span class="normal">371</span> +<span class="normal">372</span> +<span class="normal">373</span> +<span class="normal">374</span> +<span class="normal">375</span> +<span class="normal">376</span> +<span class="normal">377</span> +<span class="normal">378</span> +<span class="normal">379</span> +<span class="normal">380</span> +<span class="normal">381</span> +<span class="normal">382</span> +<span class="normal">383</span> +<span class="normal">384</span> +<span class="normal">385</span> +<span class="normal">386</span> +<span class="normal">387</span> +<span class="normal">388</span> +<span class="normal">389</span> +<span class="normal">390</span> +<span class="normal">391</span> +<span class="normal">392</span> +<span class="normal">393</span> +<span class="normal">394</span> +<span class="normal">395</span> +<span class="normal">396</span> +<span class="normal">397</span> +<span class="normal">398</span> +<span class="normal">399</span> +<span class="normal">400</span> +<span class="normal">401</span> +<span class="normal">402</span> +<span class="normal">403</span> +<span class="normal">404</span> +<span class="normal">405</span> +<span class="normal">406</span> +<span class="normal">407</span> +<span class="normal">408</span> +<span class="normal">409</span> +<span class="normal">410</span> +<span class="normal">411</span> +<span class="normal">412</span> +<span class="normal">413</span> +<span class="normal">414</span> +<span class="normal">415</span> +<span class="normal">416</span> +<span class="normal">417</span> +<span class="normal">418</span> +<span class="normal">419</span> +<span class="normal">420</span> +<span class="normal">421</span> +<span class="normal">422</span> +<span class="normal">423</span> +<span class="normal">424</span> +<span class="normal">425</span> +<span class="normal">426</span> +<span class="normal">427</span> +<span class="normal">428</span> +<span class="normal">429</span> +<span class="normal">430</span> +<span class="normal">431</span> +<span class="normal">432</span> +<span class="normal">433</span> +<span class="normal">434</span> +<span class="normal">435</span> +<span class="normal">436</span> +<span class="normal">437</span> +<span class="normal">438</span> +<span class="normal">439</span> +<span class="normal">440</span> +<span class="normal">441</span> +<span class="normal">442</span> +<span class="normal">443</span> +<span class="normal">444</span> +<span class="normal">445</span> +<span class="normal">446</span> +<span class="normal">447</span> +<span class="normal">448</span> +<span class="normal">449</span> +<span class="normal">450</span> +<span class="normal">451</span> +<span class="normal">452</span> +<span class="normal">453</span> +<span class="normal">454</span> +<span class="normal">455</span> +<span class="normal">456</span> +<span class="normal">457</span> +<span class="normal">458</span> +<span class="normal">459</span> +<span class="normal">460</span> +<span class="normal">461</span> +<span class="normal">462</span> +<span class="normal">463</span> +<span class="normal">464</span> +<span class="normal">465</span> +<span class="normal">466</span> +<span class="normal">467</span> +<span class="normal">468</span> +<span class="normal">469</span> +<span class="normal">470</span> +<span class="normal">471</span> +<span class="normal">472</span> +<span class="normal">473</span> +<span class="normal">474</span> +<span class="normal">475</span> +<span class="normal">476</span> +<span class="normal">477</span> +<span class="normal">478</span> +<span class="normal">479</span> +<span class="normal">480</span> +<span class="normal">481</span> +<span class="normal">482</span> +<span class="normal">483</span> +<span class="normal">484</span> +<span class="normal">485</span> +<span class="normal">486</span> +<span class="normal">487</span> +<span class="normal">488</span> +<span class="normal">489</span> +<span class="normal">490</span> +<span class="normal">491</span> +<span class="normal">492</span> +<span class="normal">493</span> +<span class="normal">494</span> +<span class="normal">495</span> +<span class="normal">496</span> +<span class="normal">497</span> +<span class="normal">498</span> +<span class="normal">499</span> +<span class="normal">500</span> +<span class="normal">501</span> +<span class="normal">502</span> +<span class="normal">503</span> +<span class="normal">504</span> +<span class="normal">505</span> +<span class="normal">506</span> +<span class="normal">507</span> +<span class="normal">508</span> +<span class="normal">509</span> +<span class="normal">510</span> +<span class="normal">511</span> +<span class="normal">512</span> +<span class="normal">513</span> +<span class="normal">514</span> +<span class="normal">515</span> +<span class="normal">516</span> +<span class="normal">517</span> +<span class="normal">518</span> +<span class="normal">519</span> +<span class="normal">520</span> +<span class="normal">521</span> +<span class="normal">522</span> +<span class="normal">523</span> +<span class="normal">524</span> +<span class="normal">525</span> +<span class="normal">526</span> +<span class="normal">527</span> +<span class="normal">528</span> +<span class="normal">529</span> +<span class="normal">530</span> +<span class="normal">531</span> +<span class="normal">532</span> +<span class="normal">533</span> +<span class="normal">534</span> +<span class="normal">535</span> +<span class="normal">536</span> +<span class="normal">537</span> +<span class="normal">538</span> +<span class="normal">539</span> +<span class="normal">540</span> +<span class="normal">541</span> +<span class="normal">542</span> +<span class="normal">543</span> +<span class="normal">544</span> +<span class="normal">545</span> +<span class="normal">546</span> +<span class="normal">547</span> +<span class="normal">548</span> +<span class="normal">549</span> +<span class="normal">550</span> +<span class="normal">551</span> +<span class="normal">552</span> +<span class="normal">553</span> +<span class="normal">554</span> +<span class="normal">555</span> +<span class="normal">556</span> +<span class="normal">557</span> +<span class="normal">558</span> +<span class="normal">559</span> +<span class="normal">560</span> +<span class="normal">561</span> +<span class="normal">562</span> +<span class="normal">563</span> +<span class="normal">564</span> +<span class="normal">565</span> +<span class="normal">566</span> +<span class="normal">567</span> +<span class="normal">568</span> +<span class="normal">569</span> +<span class="normal">570</span> +<span class="normal">571</span> +<span class="normal">572</span> +<span class="normal">573</span> +<span class="normal">574</span> +<span class="normal">575</span> +<span class="normal">576</span> +<span class="normal">577</span> +<span class="normal">578</span> +<span class="normal">579</span> +<span class="normal">580</span> +<span class="normal">581</span> +<span class="normal">582</span> +<span class="normal">583</span> +<span class="normal">584</span> +<span class="normal">585</span> +<span class="normal">586</span> +<span class="normal">587</span> +<span class="normal">588</span> +<span class="normal">589</span> +<span class="normal">590</span> +<span class="normal">591</span> +<span class="normal">592</span> +<span class="normal">593</span> +<span class="normal">594</span> +<span class="normal">595</span> +<span class="normal">596</span> +<span class="normal">597</span> +<span class="normal">598</span> +<span class="normal">599</span> +<span class="normal">600</span> +<span class="normal">601</span> +<span class="normal">602</span> +<span class="normal">603</span> +<span class="normal">604</span> +<span class="normal">605</span> +<span class="normal">606</span> +<span class="normal">607</span> +<span class="normal">608</span> +<span class="normal">609</span> +<span class="normal">610</span> +<span class="normal">611</span> +<span class="normal">612</span> +<span class="normal">613</span> +<span class="normal">614</span> +<span class="normal">615</span> +<span class="normal">616</span> +<span class="normal">617</span> +<span class="normal">618</span> +<span class="normal">619</span> +<span class="normal">620</span> +<span class="normal">621</span> +<span class="normal">622</span> +<span class="normal">623</span> +<span class="normal">624</span> +<span class="normal">625</span> +<span class="normal">626</span> +<span class="normal">627</span> +<span class="normal">628</span> +<span class="normal">629</span> +<span class="normal">630</span> +<span class="normal">631</span> +<span class="normal">632</span> +<span class="normal">633</span> +<span class="normal">634</span> +<span class="normal">635</span> +<span class="normal">636</span> +<span class="normal">637</span> +<span class="normal">638</span> +<span class="normal">639</span> +<span class="normal">640</span> +<span class="normal">641</span> +<span class="normal">642</span> +<span class="normal">643</span> +<span class="normal">644</span> +<span class="normal">645</span> +<span class="normal">646</span> +<span class="normal">647</span> +<span class="normal">648</span> +<span class="normal">649</span> +<span class="normal">650</span> +<span class="normal">651</span> +<span class="normal">652</span> +<span class="normal">653</span> +<span class="normal">654</span> +<span class="normal">655</span> +<span class="normal">656</span> +<span class="normal">657</span> +<span class="normal">658</span> +<span class="normal">659</span> +<span class="normal">660</span> +<span class="normal">661</span> +<span class="normal">662</span> +<span class="normal">663</span> +<span class="normal">664</span> +<span class="normal">665</span> +<span class="normal">666</span> +<span class="normal">667</span> +<span class="normal">668</span> +<span class="normal">669</span> +<span class="normal">670</span> +<span class="normal">671</span> +<span class="normal">672</span> +<span class="normal">673</span> +<span class="normal">674</span> +<span class="normal">675</span> +<span class="normal">676</span> +<span class="normal">677</span> +<span class="normal">678</span> +<span class="normal">679</span> +<span class="normal">680</span> +<span class="normal">681</span> +<span class="normal">682</span> +<span class="normal">683</span> +<span class="normal">684</span> +<span class="normal">685</span> +<span class="normal">686</span> +<span class="normal">687</span> +<span class="normal">688</span> +<span class="normal">689</span> +<span class="normal">690</span> +<span class="normal">691</span> +<span class="normal">692</span> +<span class="normal">693</span> +<span class="normal">694</span> +<span class="normal">695</span> +<span class="normal">696</span> +<span class="normal">697</span> +<span class="normal">698</span> +<span class="normal">699</span> +<span class="normal">700</span> +<span class="normal">701</span> +<span class="normal">702</span> +<span class="normal">703</span> +<span class="normal">704</span> +<span class="normal">705</span> +<span class="normal">706</span> +<span class="normal">707</span> +<span class="normal">708</span> +<span class="normal">709</span> +<span class="normal">710</span> +<span class="normal">711</span> +<span class="normal">712</span> +<span class="normal">713</span> +<span class="normal">714</span> +<span class="normal">715</span> +<span class="normal">716</span> +<span class="normal">717</span> +<span class="normal">718</span> +<span class="normal">719</span> +<span class="normal">720</span> +<span class="normal">721</span> +<span class="normal">722</span> +<span class="normal">723</span> +<span class="normal">724</span> +<span class="normal">725</span> +<span class="normal">726</span> +<span class="normal">727</span> +<span class="normal">728</span> +<span class="normal">729</span> +<span class="normal">730</span> +<span class="normal">731</span> +<span class="normal">732</span> +<span class="normal">733</span> +<span class="normal">734</span> +<span class="normal">735</span> +<span class="normal">736</span> +<span class="normal">737</span> +<span class="normal">738</span> +<span class="normal">739</span> +<span class="normal">740</span> +<span class="normal">741</span> +<span class="normal">742</span> +<span class="normal">743</span> +<span class="normal">744</span> +<span class="normal">745</span> +<span class="normal">746</span> +<span class="normal">747</span> +<span class="normal">748</span> +<span class="normal">749</span> +<span class="normal">750</span> +<span class="normal">751</span> +<span class="normal">752</span> +<span class="normal">753</span> +<span class="normal">754</span> +<span class="normal">755</span> +<span class="normal">756</span> +<span class="normal">757</span> +<span class="normal">758</span> +<span class="normal">759</span> +<span class="normal">760</span> +<span class="normal">761</span> +<span class="normal">762</span> +<span class="normal">763</span> +<span class="normal">764</span> +<span class="normal">765</span> +<span class="normal">766</span> +<span class="normal">767</span> +<span class="normal">768</span> +<span class="normal">769</span> +<span class="normal">770</span> +<span class="normal">771</span> +<span class="normal">772</span> +<span class="normal">773</span> +<span class="normal">774</span> +<span class="normal">775</span> +<span class="normal">776</span> +<span class="normal">777</span> +<span class="normal">778</span> +<span class="normal">779</span> +<span class="normal">780</span> +<span class="normal">781</span> +<span class="normal">782</span> +<span class="normal">783</span> +<span class="normal">784</span> +<span class="normal">785</span> +<span class="normal">786</span> +<span class="normal">787</span> +<span class="normal">788</span> +<span class="normal">789</span> +<span class="normal">790</span> +<span class="normal">791</span> +<span class="normal">792</span> +<span class="normal">793</span> +<span class="normal">794</span> +<span class="normal">795</span> +<span class="normal">796</span> +<span class="normal">797</span> +<span class="normal">798</span> +<span class="normal">799</span> +<span class="normal">800</span> +<span class="normal">801</span> +<span class="normal">802</span> +<span class="normal">803</span> +<span class="normal">804</span> +<span class="normal">805</span> +<span class="normal">806</span> +<span class="normal">807</span> +<span class="normal">808</span> +<span class="normal">809</span> +<span class="normal">810</span> +<span class="normal">811</span> +<span class="normal">812</span> +<span class="normal">813</span> +<span class="normal">814</span> +<span class="normal">815</span> +<span class="normal">816</span> +<span class="normal">817</span> +<span class="normal">818</span> +<span class="normal">819</span> +<span class="normal">820</span> +<span class="normal">821</span> +<span class="normal">822</span> +<span class="normal">823</span> +<span class="normal">824</span> +<span class="normal">825</span> +<span class="normal">826</span> +<span class="normal">827</span> +<span class="normal">828</span> +<span class="normal">829</span> +<span class="normal">830</span> +<span class="normal">831</span> +<span class="normal">832</span> +<span class="normal">833</span> +<span class="normal">834</span> +<span class="normal">835</span> +<span class="normal">836</span> +<span class="normal">837</span> +<span class="normal">838</span> +<span class="normal">839</span> +<span class="normal">840</span> +<span class="normal">841</span> +<span class="normal">842</span> +<span class="normal">843</span> +<span class="normal">844</span> +<span class="normal">845</span> +<span class="normal">846</span> +<span class="normal">847</span> +<span class="normal">848</span> +<span class="normal">849</span> +<span class="normal">850</span> +<span class="normal">851</span> +<span class="normal">852</span> +<span class="normal">853</span> +<span class="normal">854</span> +<span class="normal">855</span> +<span class="normal">856</span> +<span class="normal">857</span> +<span class="normal">858</span> +<span class="normal">859</span> +<span class="normal">860</span> +<span class="normal">861</span> +<span class="normal">862</span> +<span class="normal">863</span> +<span class="normal">864</span> +<span class="normal">865</span> +<span class="normal">866</span> +<span class="normal">867</span> +<span class="normal">868</span> +<span class="normal">869</span> +<span class="normal">870</span> +<span class="normal">871</span> +<span class="normal">872</span> +<span class="normal">873</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * dropbox-command-client.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Implements connection handling and C interface for the Dropbox command socket.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span><span class="error2"><--- Include file: <sys/types.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-25" name="line-25"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/socket.h></span><span class="error2"><--- Include file: <sys/socket.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-26" name="line-26"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/un.h></span><span class="error2"><--- Include file: <sys/un.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-27" name="line-27"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><errno.h></span><span class="error2"><--- Include file: <errno.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-28" name="line-28"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><unistd.h></span><span class="error2"><--- Include file: <unistd.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-29" name="line-29"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><fcntl.h></span><span class="error2"><--- Include file: <fcntl.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-30" name="line-30"></a> +<a id="line-31" name="line-31"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdarg.h></span><span class="error2"><--- Include file: <stdarg.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-32" name="line-32"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><string.h></span><span class="error2"><--- Include file: <string.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-33" name="line-33"></a> +<a id="line-34" name="line-34"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="error2"><--- Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-35" name="line-35"></a> +<a id="line-36" name="line-36"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"g-util.h"</span> +<a id="line-37" name="line-37"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-client-util.h"</span> +<a id="line-38" name="line-38"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-command-client.h"</span> +<a id="line-39" name="line-39"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox.h"</span> +<a id="line-40" name="line-40"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span> +<a id="line-41" name="line-41"></a> +<a id="line-42" name="line-42"></a><span class="cm">/* TODO: make this asynchronous ;) */</span> +<a id="line-43" name="line-43"></a> +<a id="line-44" name="line-44"></a><span class="cm">/*</span> +<a id="line-45" name="line-45"></a><span class="cm"> this is a tiny hack, necessitated by the fact that</span> +<a id="line-46" name="line-46"></a><span class="cm"> finish_file info command is in caja_dropbox,</span> +<a id="line-47" name="line-47"></a><span class="cm"> this can be cleaned up once the file_info_command isn't a special</span> +<a id="line-48" name="line-48"></a><span class="cm"> case anylonger</span> +<a id="line-49" name="line-49"></a><span class="cm">*/</span> +<a id="line-50" name="line-50"></a><span class="n">gboolean</span><span class="w"> </span><span class="nf">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="p">);</span> +<a id="line-51" name="line-51"></a> +<a id="line-52" name="line-52"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-53" name="line-53"></a><span class="w"> </span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">;</span> +<a id="line-54" name="line-54"></a><span class="w"> </span><span class="n">guint</span><span class="w"> </span><span class="n">connect_attempt</span><span class="p">;</span> +<a id="line-55" name="line-55"></a><span class="p">}</span><span class="w"> </span><span class="n">ConnectionAttempt</span><span class="p">;</span> +<a id="line-56" name="line-56"></a> +<a id="line-57" name="line-57"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-58" name="line-58"></a><span class="w"> </span><span class="n">DropboxCommandClientConnectionAttemptHook</span><span class="w"> </span><span class="n">h</span><span class="p">;</span> +<a id="line-59" name="line-59"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-60" name="line-60"></a><span class="p">}</span><span class="w"> </span><span class="n">DropboxCommandClientConnectionAttempt</span><span class="p">;</span> +<a id="line-61" name="line-61"></a> +<a id="line-62" name="line-62"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-63" name="line-63"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dgc</span><span class="p">;</span> +<a id="line-64" name="line-64"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">response</span><span class="p">;</span> +<a id="line-65" name="line-65"></a><span class="p">}</span><span class="w"> </span><span class="n">DropboxGeneralCommandResponse</span><span class="p">;</span> +<a id="line-66" name="line-66"></a> +<a id="line-67" name="line-67"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span> +<a id="line-68" name="line-68"></a><span class="nf">on_connect</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-69" name="line-69"></a><span class="w"> </span><span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span> +<a id="line-70" name="line-70"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-71" name="line-71"></a><span class="p">}</span> +<a id="line-72" name="line-72"></a> +<a id="line-73" name="line-73"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span> +<a id="line-74" name="line-74"></a><span class="nf">on_disconnect</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-75" name="line-75"></a><span class="w"> </span><span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span> +<a id="line-76" name="line-76"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-77" name="line-77"></a><span class="p">}</span> +<a id="line-78" name="line-78"></a> +<a id="line-79" name="line-79"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span> +<a id="line-80" name="line-80"></a><span class="nf">on_connection_attempt</span><span class="p">(</span><span class="n">ConnectionAttempt</span><span class="w"> </span><span class="o">*</span><span class="n">ca</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-81" name="line-81"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">ll</span><span class="p">;</span> +<a id="line-82" name="line-82"></a> +<a id="line-83" name="line-83"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">ll</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ca</span><span class="o">-></span><span class="n">dcc</span><span class="o">-></span><span class="n">ca_hooklist</span><span class="p">;</span><span class="w"> </span><span class="n">ll</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">ll</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_next</span><span class="p">(</span><span class="n">ll</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> +<a id="line-84" name="line-84"></a><span class="w"> </span><span class="n">DropboxCommandClientConnectionAttempt</span><span class="w"> </span><span class="o">*</span><span class="n">dccca</span><span class="w"> </span><span class="o">=</span> +<a id="line-85" name="line-85"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommandClientConnectionAttempt</span><span class="w"> </span><span class="o">*</span><span class="p">)(</span><span class="n">ll</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> +<a id="line-86" name="line-86"></a><span class="w"> </span><span class="n">dccca</span><span class="o">-></span><span class="n">h</span><span class="p">(</span><span class="n">ca</span><span class="o">-></span><span class="n">connect_attempt</span><span class="p">,</span><span class="w"> </span><span class="n">dccca</span><span class="o">-></span><span class="n">ud</span><span class="p">);</span> +<a id="line-87" name="line-87"></a><span class="w"> </span><span class="p">}</span> +<a id="line-88" name="line-88"></a> +<a id="line-89" name="line-89"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">ca</span><span class="p">);</span> +<a id="line-90" name="line-90"></a> +<a id="line-91" name="line-91"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-92" name="line-92"></a><span class="p">}</span> +<a id="line-93" name="line-93"></a> +<a id="line-94" name="line-94"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span> +<a id="line-95" name="line-95"></a><span class="nf">receive_args_until_done</span><span class="p">(</span><span class="n">GIOChannel</span><span class="w"> </span><span class="o">*</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">return_table</span><span class="p">,</span> +<a id="line-96" name="line-96"></a><span class="w"> </span><span class="n">GError</span><span class="w"> </span><span class="o">**</span><span class="n">err</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-97" name="line-97"></a><span class="w"> </span><span class="n">GIOStatus</span><span class="w"> </span><span class="n">iostat</span><span class="p">;</span> +<a id="line-98" name="line-98"></a><span class="w"> </span><span class="n">GError</span><span class="w"> </span><span class="o">*</span><span class="n">tmp_error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-99" name="line-99"></a><span class="w"> </span><span class="n">guint</span><span class="w"> </span><span class="n">numargs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-100" name="line-100"></a> +<a id="line-101" name="line-101"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-102" name="line-102"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">line</span><span class="p">;</span> +<a id="line-103" name="line-103"></a><span class="w"> </span><span class="n">gsize</span><span class="w"> </span><span class="n">term_pos</span><span class="p">;</span> +<a id="line-104" name="line-104"></a> +<a id="line-105" name="line-105"></a><span class="w"> </span><span class="cm">/* if we are getting too many args, connection could be malicious */</span> +<a id="line-106" name="line-106"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">numargs</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="mi">20</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-107" name="line-107"></a><span class="w"> </span><span class="n">g_set_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> +<a id="line-108" name="line-108"></a><span class="w"> </span><span class="n">g_quark_from_static_string</span><span class="p">(</span><span class="s">"malicious connection"</span><span class="p">),</span> +<a id="line-109" name="line-109"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="s">"malicious connection"</span><span class="p">);</span> +<a id="line-110" name="line-110"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-111" name="line-111"></a><span class="w"> </span><span class="p">}</span> +<a id="line-112" name="line-112"></a> +<a id="line-113" name="line-113"></a><span class="w"> </span><span class="cm">/* get the string */</span> +<a id="line-114" name="line-114"></a><span class="w"> </span><span class="n">iostat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_read_line</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">line</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span> +<a id="line-115" name="line-115"></a><span class="w"> </span><span class="o">&</span><span class="n">term_pos</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-116" name="line-116"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">iostat</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_ERROR</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">tmp_error</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-117" name="line-117"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-118" name="line-118"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tmp_error</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-119" name="line-119"></a><span class="w"> </span><span class="n">g_propagate_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span><span class="w"> </span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-120" name="line-120"></a><span class="w"> </span><span class="p">}</span> +<a id="line-121" name="line-121"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-122" name="line-122"></a><span class="w"> </span><span class="p">}</span> +<a id="line-123" name="line-123"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">iostat</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_EOF</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-124" name="line-124"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-125" name="line-125"></a><span class="w"> </span><span class="n">g_set_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> +<a id="line-126" name="line-126"></a><span class="w"> </span><span class="n">g_quark_from_static_string</span><span class="p">(</span><span class="s">"connection closed"</span><span class="p">),</span> +<a id="line-127" name="line-127"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="s">"connection closed"</span><span class="p">);</span> +<a id="line-128" name="line-128"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-129" name="line-129"></a><span class="w"> </span><span class="p">}</span> +<a id="line-130" name="line-130"></a> +<a id="line-131" name="line-131"></a><span class="w"> </span><span class="o">*</span><span class="p">(</span><span class="n">line</span><span class="o">+</span><span class="n">term_pos</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span> +<a id="line-132" name="line-132"></a> +<a id="line-133" name="line-133"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"done"</span><span class="p">,</span><span class="w"> </span><span class="n">line</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-134" name="line-134"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-135" name="line-135"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-136" name="line-136"></a><span class="w"> </span><span class="p">}</span> +<a id="line-137" name="line-137"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-138" name="line-138"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">parse_result</span><span class="p">;</span> +<a id="line-139" name="line-139"></a> +<a id="line-140" name="line-140"></a><span class="w"> </span><span class="n">parse_result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dropbox_client_util_command_parse_arg</span><span class="p">(</span><span class="n">line</span><span class="p">,</span><span class="w"> </span><span class="n">return_table</span><span class="p">);</span> +<a id="line-141" name="line-141"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-142" name="line-142"></a> +<a id="line-143" name="line-143"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">FALSE</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">parse_result</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-144" name="line-144"></a><span class="w"> </span><span class="n">g_set_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> +<a id="line-145" name="line-145"></a><span class="w"> </span><span class="n">g_quark_from_static_string</span><span class="p">(</span><span class="s">"parse error"</span><span class="p">),</span> +<a id="line-146" name="line-146"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="s">"parse error"</span><span class="p">);</span> +<a id="line-147" name="line-147"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-148" name="line-148"></a><span class="w"> </span><span class="p">}</span> +<a id="line-149" name="line-149"></a><span class="w"> </span><span class="p">}</span> +<a id="line-150" name="line-150"></a> +<a id="line-151" name="line-151"></a><span class="w"> </span><span class="n">numargs</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> +<a id="line-152" name="line-152"></a><span class="w"> </span><span class="p">}</span> +<a id="line-153" name="line-153"></a> +<a id="line-154" name="line-154"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-155" name="line-155"></a><span class="p">}</span> +<a id="line-156" name="line-156"></a> +<a id="line-157" name="line-157"></a><span class="cm">/*</span> +<a id="line-158" name="line-158"></a><span class="cm"> sends a command to the dropbox server</span> +<a id="line-159" name="line-159"></a><span class="cm"> returns an hash of the return values</span> +<a id="line-160" name="line-160"></a> +<a id="line-161" name="line-161"></a><span class="cm"> in theory, this should disconnection errors</span> +<a id="line-162" name="line-162"></a><span class="cm"> but it doesn't matter right now, any error is a sufficient</span> +<a id="line-163" name="line-163"></a><span class="cm"> condition to disconnect</span> +<a id="line-164" name="line-164"></a><span class="cm">*/</span> +<a id="line-165" name="line-165"></a><span class="k">static</span><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span> +<a id="line-166" name="line-166"></a><span class="nf">send_command_to_db</span><span class="p">(</span><span class="n">GIOChannel</span><span class="w"> </span><span class="o">*</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">command_name</span><span class="p">,</span> +<a id="line-167" name="line-167"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="n">GError</span><span class="w"> </span><span class="o">**</span><span class="n">err</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-168" name="line-168"></a><span class="w"> </span><span class="n">GError</span><span class="w"> </span><span class="o">*</span><span class="n">tmp_error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-169" name="line-169"></a><span class="w"> </span><span class="n">GIOStatus</span><span class="w"> </span><span class="n">iostat</span><span class="p">;</span> +<a id="line-170" name="line-170"></a><span class="w"> </span><span class="n">gsize</span><span class="w"> </span><span class="n">bytes_trans</span><span class="p">;</span> +<a id="line-171" name="line-171"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">line</span><span class="p">;</span> +<a id="line-172" name="line-172"></a> +<a id="line-173" name="line-173"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">chan</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-174" name="line-174"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">command_name</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-175" name="line-175"></a> +<a id="line-176" name="line-176"></a> +<a id="line-177" name="line-177"></a><span class="cp">#define WRITE_OR_DIE_SANI(s,l) { \</span> +<a id="line-178" name="line-178"></a><span class="cp"> gchar *sani_s; \</span> +<a id="line-179" name="line-179"></a><span class="cp"> sani_s = dropbox_client_util_sanitize(s); \</span> +<a id="line-180" name="line-180"></a><span class="cp"> iostat = g_io_channel_write_chars(chan, sani_s,l, &bytes_trans, \</span> +<a id="line-181" name="line-181"></a><span class="cp"> &tmp_error); \</span> +<a id="line-182" name="line-182"></a><span class="cp"> g_free(sani_s); \</span> +<a id="line-183" name="line-183"></a><span class="cp"> if (iostat == G_IO_STATUS_ERROR || \</span> +<a id="line-184" name="line-184"></a><span class="cp"> iostat == G_IO_STATUS_AGAIN) { \</span> +<a id="line-185" name="line-185"></a><span class="cp"> if (tmp_error != NULL) { \</span> +<a id="line-186" name="line-186"></a><span class="cp"> g_propagate_error(err, tmp_error); \</span> +<a id="line-187" name="line-187"></a><span class="cp"> } \</span> +<a id="line-188" name="line-188"></a><span class="cp"> return NULL; \</span> +<a id="line-189" name="line-189"></a><span class="cp"> } \</span> +<a id="line-190" name="line-190"></a><span class="cp"> }</span> +<a id="line-191" name="line-191"></a> +<a id="line-192" name="line-192"></a><span class="cp">#define WRITE_OR_DIE(s,l) { \</span> +<a id="line-193" name="line-193"></a><span class="cp"> iostat = g_io_channel_write_chars(chan, s,l, &bytes_trans, \</span> +<a id="line-194" name="line-194"></a><span class="cp"> &tmp_error); \</span> +<a id="line-195" name="line-195"></a><span class="cp"> if (iostat == G_IO_STATUS_ERROR || \</span> +<a id="line-196" name="line-196"></a><span class="cp"> iostat == G_IO_STATUS_AGAIN) { \</span> +<a id="line-197" name="line-197"></a><span class="cp"> if (tmp_error != NULL) { \</span> +<a id="line-198" name="line-198"></a><span class="cp"> g_propagate_error(err, tmp_error); \</span> +<a id="line-199" name="line-199"></a><span class="cp"> } \</span> +<a id="line-200" name="line-200"></a><span class="cp"> return NULL; \</span> +<a id="line-201" name="line-201"></a><span class="cp"> } \</span> +<a id="line-202" name="line-202"></a><span class="cp"> }</span> +<a id="line-203" name="line-203"></a> +<a id="line-204" name="line-204"></a><span class="w"> </span><span class="cm">/* send command to server */</span> +<a id="line-205" name="line-205"></a><span class="w"> </span><span class="n">WRITE_OR_DIE_SANI</span><span class="p">(</span><span class="n">command_name</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span> +<a id="line-206" name="line-206"></a><span class="w"> </span><span class="n">WRITE_OR_DIE</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span> +<a id="line-207" name="line-207"></a> +<a id="line-208" name="line-208"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">args</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-209" name="line-209"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">keys</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">li</span><span class="p">;</span> +<a id="line-210" name="line-210"></a> +<a id="line-211" name="line-211"></a><span class="w"> </span><span class="n">keys</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_get_keys</span><span class="p">(</span><span class="n">args</span><span class="p">);</span> +<a id="line-212" name="line-212"></a> +<a id="line-213" name="line-213"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">keys</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> +<a id="line-214" name="line-214"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span> +<a id="line-215" name="line-215"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">value</span><span class="p">;</span> +<a id="line-216" name="line-216"></a> +<a id="line-217" name="line-217"></a><span class="w"> </span><span class="n">WRITE_OR_DIE_SANI</span><span class="p">((</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span> +<a id="line-218" name="line-218"></a> +<a id="line-219" name="line-219"></a><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> +<a id="line-220" name="line-220"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">value</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-221" name="line-221"></a><span class="w"> </span><span class="n">WRITE_OR_DIE</span><span class="p">(</span><span class="s">"</span><span class="se">\t</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span> +<a id="line-222" name="line-222"></a><span class="w"> </span><span class="n">WRITE_OR_DIE_SANI</span><span class="p">(</span><span class="n">value</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span> +<a id="line-223" name="line-223"></a><span class="w"> </span><span class="p">}</span> +<a id="line-224" name="line-224"></a><span class="w"> </span><span class="n">WRITE_OR_DIE</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span> +<a id="line-225" name="line-225"></a><span class="w"> </span><span class="p">}</span> +<a id="line-226" name="line-226"></a> +<a id="line-227" name="line-227"></a><span class="w"> </span><span class="n">g_list_free</span><span class="p">(</span><span class="n">keys</span><span class="p">);</span> +<a id="line-228" name="line-228"></a><span class="w"> </span><span class="p">}</span> +<a id="line-229" name="line-229"></a> +<a id="line-230" name="line-230"></a><span class="w"> </span><span class="n">WRITE_OR_DIE</span><span class="p">(</span><span class="s">"done</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span> +<a id="line-231" name="line-231"></a> +<a id="line-232" name="line-232"></a><span class="cp">#undef WRITE_OR_DIE</span> +<a id="line-233" name="line-233"></a><span class="cp">#undef WRITE_OR_DIE_SANI</span> +<a id="line-234" name="line-234"></a> +<a id="line-235" name="line-235"></a><span class="w"> </span><span class="n">g_io_channel_flush</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-236" name="line-236"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tmp_error</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-237" name="line-237"></a><span class="w"> </span><span class="n">g_propagate_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span><span class="w"> </span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-238" name="line-238"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-239" name="line-239"></a><span class="w"> </span><span class="p">}</span> +<a id="line-240" name="line-240"></a> +<a id="line-241" name="line-241"></a><span class="w"> </span><span class="cm">/* now we have to read the data */</span> +<a id="line-242" name="line-242"></a><span class="w"> </span><span class="n">iostat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_read_line</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">line</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span> +<a id="line-243" name="line-243"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-244" name="line-244"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">iostat</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_ERROR</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-245" name="line-245"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">line</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-246" name="line-246"></a><span class="w"> </span><span class="n">g_propagate_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span><span class="w"> </span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-247" name="line-247"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-248" name="line-248"></a><span class="w"> </span><span class="p">}</span> +<a id="line-249" name="line-249"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">iostat</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_AGAIN</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-250" name="line-250"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">line</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-251" name="line-251"></a><span class="w"> </span><span class="n">g_set_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> +<a id="line-252" name="line-252"></a><span class="w"> </span><span class="n">g_quark_from_static_string</span><span class="p">(</span><span class="s">"dropbox command connection timed out"</span><span class="p">),</span> +<a id="line-253" name="line-253"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span> +<a id="line-254" name="line-254"></a><span class="w"> </span><span class="s">"dropbox command connection timed out"</span><span class="p">);</span> +<a id="line-255" name="line-255"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-256" name="line-256"></a><span class="w"> </span><span class="p">}</span> +<a id="line-257" name="line-257"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">iostat</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_EOF</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-258" name="line-258"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">line</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-259" name="line-259"></a><span class="w"> </span><span class="n">g_set_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> +<a id="line-260" name="line-260"></a><span class="w"> </span><span class="n">g_quark_from_static_string</span><span class="p">(</span><span class="s">"dropbox command connection closed"</span><span class="p">),</span> +<a id="line-261" name="line-261"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span> +<a id="line-262" name="line-262"></a><span class="w"> </span><span class="s">"dropbox command connection closed"</span><span class="p">);</span> +<a id="line-263" name="line-263"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-264" name="line-264"></a><span class="w"> </span><span class="p">}</span> +<a id="line-265" name="line-265"></a> +<a id="line-266" name="line-266"></a><span class="w"> </span><span class="cm">/* if the response was okay */</span> +<a id="line-267" name="line-267"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strncmp</span><span class="p">(</span><span class="n">line</span><span class="p">,</span><span class="w"> </span><span class="s">"ok</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-268" name="line-268"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">return_table</span><span class="w"> </span><span class="o">=</span> +<a id="line-269" name="line-269"></a><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-270" name="line-270"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-271" name="line-271"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span> +<a id="line-272" name="line-272"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span> +<a id="line-273" name="line-273"></a> +<a id="line-274" name="line-274"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-275" name="line-275"></a><span class="w"> </span><span class="n">line</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-276" name="line-276"></a> +<a id="line-277" name="line-277"></a><span class="w"> </span><span class="n">receive_args_until_done</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">return_table</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-278" name="line-278"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tmp_error</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-279" name="line-279"></a><span class="w"> </span><span class="n">g_hash_table_destroy</span><span class="p">(</span><span class="n">return_table</span><span class="p">);</span> +<a id="line-280" name="line-280"></a><span class="w"> </span><span class="n">g_propagate_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span><span class="w"> </span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-281" name="line-281"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-282" name="line-282"></a><span class="w"> </span><span class="p">}</span> +<a id="line-283" name="line-283"></a> +<a id="line-284" name="line-284"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">return_table</span><span class="p">;</span> +<a id="line-285" name="line-285"></a><span class="w"> </span><span class="p">}</span> +<a id="line-286" name="line-286"></a><span class="w"> </span><span class="cm">/* otherwise */</span> +<a id="line-287" name="line-287"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-288" name="line-288"></a><span class="w"> </span><span class="cm">/* read errors off until we get done */</span> +<a id="line-289" name="line-289"></a><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="p">{</span> +<a id="line-290" name="line-290"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-291" name="line-291"></a><span class="w"> </span><span class="n">line</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-292" name="line-292"></a> +<a id="line-293" name="line-293"></a><span class="w"> </span><span class="cm">/* clear string */</span> +<a id="line-294" name="line-294"></a><span class="w"> </span><span class="n">iostat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_read_line</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">line</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span> +<a id="line-295" name="line-295"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-296" name="line-296"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">iostat</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_ERROR</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-297" name="line-297"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">line</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-298" name="line-298"></a><span class="w"> </span><span class="n">g_propagate_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span><span class="w"> </span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-299" name="line-299"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-300" name="line-300"></a><span class="w"> </span><span class="p">}</span> +<a id="line-301" name="line-301"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">iostat</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_AGAIN</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-302" name="line-302"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">line</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-303" name="line-303"></a><span class="w"> </span><span class="n">g_set_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> +<a id="line-304" name="line-304"></a><span class="w"> </span><span class="n">g_quark_from_static_string</span><span class="p">(</span><span class="s">"dropbox command connection timed out"</span><span class="p">),</span> +<a id="line-305" name="line-305"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span> +<a id="line-306" name="line-306"></a><span class="w"> </span><span class="s">"dropbox command connection timed out"</span><span class="p">);</span> +<a id="line-307" name="line-307"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-308" name="line-308"></a> +<a id="line-309" name="line-309"></a><span class="w"> </span><span class="p">}</span> +<a id="line-310" name="line-310"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">iostat</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_EOF</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-311" name="line-311"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">line</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-312" name="line-312"></a><span class="w"> </span><span class="n">g_set_error</span><span class="p">(</span><span class="n">err</span><span class="p">,</span> +<a id="line-313" name="line-313"></a><span class="w"> </span><span class="n">g_quark_from_static_string</span><span class="p">(</span><span class="s">"dropbox command connection closed"</span><span class="p">),</span> +<a id="line-314" name="line-314"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span> +<a id="line-315" name="line-315"></a><span class="w"> </span><span class="s">"dropbox command connection closed"</span><span class="p">);</span> +<a id="line-316" name="line-316"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-317" name="line-317"></a><span class="w"> </span><span class="p">}</span> +<a id="line-318" name="line-318"></a> +<a id="line-319" name="line-319"></a><span class="w"> </span><span class="cm">/* we got our line */</span> +<a id="line-320" name="line-320"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">strncmp</span><span class="p">(</span><span class="n">line</span><span class="p">,</span><span class="w"> </span><span class="s">"done</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span> +<a id="line-321" name="line-321"></a> +<a id="line-322" name="line-322"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">line</span><span class="p">);</span> +<a id="line-323" name="line-323"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-324" name="line-324"></a><span class="w"> </span><span class="p">}</span> +<a id="line-325" name="line-325"></a><span class="p">}</span> +<a id="line-326" name="line-326"></a> +<a id="line-327" name="line-327"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-328" name="line-328"></a><span class="nf">do_file_info_command</span><span class="p">(</span><span class="n">GIOChannel</span><span class="w"> </span><span class="o">*</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="p">,</span><span class="w"> </span><span class="n">GError</span><span class="w"> </span><span class="o">**</span><span class="n">gerr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-329" name="line-329"></a><span class="w"> </span><span class="cm">/* we need to send two requests to dropbox:</span> +<a id="line-330" name="line-330"></a><span class="cm"> file status, and folder_tags */</span> +<a id="line-331" name="line-331"></a><span class="w"> </span><span class="n">GError</span><span class="w"> </span><span class="o">*</span><span class="n">tmp_gerr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-332" name="line-332"></a><span class="w"> </span><span class="n">DropboxFileInfoCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dficr</span><span class="p">;</span> +<a id="line-333" name="line-333"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">file_status_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">emblems_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-334" name="line-334"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-335" name="line-335"></a> +<a id="line-336" name="line-336"></a><span class="w"> </span><span class="p">{</span> +<a id="line-337" name="line-337"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename_un</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a id="line-338" name="line-338"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span> +<a id="line-339" name="line-339"></a><span class="w"> </span><span class="n">filename_un</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-340" name="line-340"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a id="line-341" name="line-341"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename_un</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-342" name="line-342"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-343" name="line-343"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span> +<a id="line-344" name="line-344"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-345" name="line-345"></a><span class="w"> </span><span class="cm">/* oooh, filename wasn't correctly encoded. mark as */</span> +<a id="line-346" name="line-346"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"file wasn't correctly encoded %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename_un</span><span class="p">);</span> +<a id="line-347" name="line-347"></a><span class="w"> </span><span class="p">}</span> +<a id="line-348" name="line-348"></a><span class="w"> </span><span class="p">}</span> +<a id="line-349" name="line-349"></a><span class="w"> </span><span class="p">}</span> +<a id="line-350" name="line-350"></a> +<a id="line-351" name="line-351"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-352" name="line-352"></a><span class="w"> </span><span class="cm">/* We couldn't get the filename. Just return empty. */</span> +<a id="line-353" name="line-353"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span> +<a id="line-354" name="line-354"></a><span class="w"> </span><span class="p">}</span> +<a id="line-355" name="line-355"></a> +<a id="line-356" name="line-356"></a><span class="w"> </span><span class="n">args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-357" name="line-357"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-358" name="line-358"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span> +<a id="line-359" name="line-359"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span> +<a id="line-360" name="line-360"></a><span class="w"> </span><span class="p">{</span> +<a id="line-361" name="line-361"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">path_arg</span><span class="p">;</span> +<a id="line-362" name="line-362"></a><span class="w"> </span><span class="n">path_arg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span> +<a id="line-363" name="line-363"></a><span class="w"> </span><span class="n">path_arg</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-364" name="line-364"></a><span class="w"> </span><span class="n">path_arg</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-365" name="line-365"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"path"</span><span class="p">),</span><span class="w"> </span><span class="n">path_arg</span><span class="p">);</span> +<a id="line-366" name="line-366"></a><span class="w"> </span><span class="p">}</span> +<a id="line-367" name="line-367"></a> +<a id="line-368" name="line-368"></a><span class="w"> </span><span class="n">emblems_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">send_command_to_db</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="s">"get_emblems"</span><span class="p">,</span><span class="w"> </span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-369" name="line-369"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblems_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-370" name="line-370"></a><span class="w"> </span><span class="cm">/* Don't need to do the other calls. */</span> +<a id="line-371" name="line-371"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">args</span><span class="p">);</span> +<a id="line-372" name="line-372"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span> +<a id="line-373" name="line-373"></a><span class="w"> </span><span class="p">}</span> +<a id="line-374" name="line-374"></a> +<a id="line-375" name="line-375"></a><span class="w"> </span><span class="cm">/* send status command to server */</span> +<a id="line-376" name="line-376"></a><span class="w"> </span><span class="n">file_status_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">send_command_to_db</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="s">"icon_overlay_file_status"</span><span class="p">,</span> +<a id="line-377" name="line-377"></a><span class="w"> </span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tmp_gerr</span><span class="p">);</span> +<a id="line-378" name="line-378"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">args</span><span class="p">);</span> +<a id="line-379" name="line-379"></a><span class="w"> </span><span class="n">args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-380" name="line-380"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tmp_gerr</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-381" name="line-381"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-382" name="line-382"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">file_status_response</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-383" name="line-383"></a><span class="w"> </span><span class="n">g_propagate_error</span><span class="p">(</span><span class="n">gerr</span><span class="p">,</span><span class="w"> </span><span class="n">tmp_gerr</span><span class="p">);</span> +<a id="line-384" name="line-384"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-385" name="line-385"></a><span class="w"> </span><span class="p">}</span> +<a id="line-386" name="line-386"></a> +<a id="line-387" name="line-387"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> +<a id="line-388" name="line-388"></a><span class="w"> </span><span class="n">args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-389" name="line-389"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-390" name="line-390"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span> +<a id="line-391" name="line-391"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span> +<a id="line-392" name="line-392"></a><span class="w"> </span><span class="p">{</span> +<a id="line-393" name="line-393"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">paths_arg</span><span class="p">;</span> +<a id="line-394" name="line-394"></a><span class="w"> </span><span class="n">paths_arg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span> +<a id="line-395" name="line-395"></a><span class="w"> </span><span class="n">paths_arg</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-396" name="line-396"></a><span class="w"> </span><span class="n">paths_arg</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-397" name="line-397"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"path"</span><span class="p">),</span><span class="w"> </span><span class="n">paths_arg</span><span class="p">);</span> +<a id="line-398" name="line-398"></a><span class="w"> </span><span class="p">}</span> +<a id="line-399" name="line-399"></a> +<a id="line-400" name="line-400"></a><span class="w"> </span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">=</span> +<a id="line-401" name="line-401"></a><span class="w"> </span><span class="n">send_command_to_db</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="s">"get_folder_tag"</span><span class="p">,</span><span class="w"> </span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tmp_gerr</span><span class="p">);</span> +<a id="line-402" name="line-402"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">args</span><span class="p">);</span> +<a id="line-403" name="line-403"></a><span class="w"> </span><span class="n">args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-404" name="line-404"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tmp_gerr</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-405" name="line-405"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span> +<a id="line-406" name="line-406"></a><span class="w"> </span><span class="n">g_hash_table_destroy</span><span class="p">(</span><span class="n">file_status_response</span><span class="p">);</span> +<a id="line-407" name="line-407"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-408" name="line-408"></a><span class="w"> </span><span class="n">g_propagate_error</span><span class="p">(</span><span class="n">gerr</span><span class="p">,</span><span class="w"> </span><span class="n">tmp_gerr</span><span class="p">);</span> +<a id="line-409" name="line-409"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-410" name="line-410"></a><span class="w"> </span><span class="p">}</span> +<a id="line-411" name="line-411"></a><span class="w"> </span><span class="p">}</span> +<a id="line-412" name="line-412"></a> +<a id="line-413" name="line-413"></a><span class="w"> </span><span class="cm">/* great server responded perfectly,</span> +<a id="line-414" name="line-414"></a><span class="cm"> now let's get this request done,</span> +<a id="line-415" name="line-415"></a><span class="cm"> ...in the glib main loop */</span> +<a id="line-416" name="line-416"></a><span class="nl">exit</span><span class="p">:</span> +<a id="line-417" name="line-417"></a><span class="w"> </span><span class="n">dficr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-418" name="line-418"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dfic</span><span class="p">;</span> +<a id="line-419" name="line-419"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">folder_tag_response</span><span class="p">;</span> +<a id="line-420" name="line-420"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">file_status_response</span><span class="p">;</span> +<a id="line-421" name="line-421"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">emblems_response</span><span class="p">;</span> +<a id="line-422" name="line-422"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_finish_file_info_command</span><span class="p">,</span><span class="w"> </span><span class="n">dficr</span><span class="p">);</span> +<a id="line-423" name="line-423"></a> +<a id="line-424" name="line-424"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-425" name="line-425"></a> +<a id="line-426" name="line-426"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-427" name="line-427"></a><span class="p">}</span> +<a id="line-428" name="line-428"></a> +<a id="line-429" name="line-429"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span> +<a id="line-430" name="line-430"></a><span class="nf">finish_general_command</span><span class="p">(</span><span class="n">DropboxGeneralCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dgcr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-431" name="line-431"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dgcr</span><span class="o">-></span><span class="n">dgc</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-432" name="line-432"></a><span class="w"> </span><span class="n">dgcr</span><span class="o">-></span><span class="n">dgc</span><span class="o">-></span><span class="n">handler</span><span class="p">(</span><span class="n">dgcr</span><span class="o">-></span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">dgcr</span><span class="o">-></span><span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span><span class="p">);</span> +<a id="line-433" name="line-433"></a><span class="w"> </span><span class="p">}</span> +<a id="line-434" name="line-434"></a> +<a id="line-435" name="line-435"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dgcr</span><span class="o">-></span><span class="n">response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-436" name="line-436"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dgcr</span><span class="o">-></span><span class="n">response</span><span class="p">);</span> +<a id="line-437" name="line-437"></a><span class="w"> </span><span class="p">}</span> +<a id="line-438" name="line-438"></a> +<a id="line-439" name="line-439"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dgcr</span><span class="o">-></span><span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span><span class="p">);</span> +<a id="line-440" name="line-440"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dgcr</span><span class="o">-></span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-441" name="line-441"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dgcr</span><span class="o">-></span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">);</span> +<a id="line-442" name="line-442"></a><span class="w"> </span><span class="p">}</span> +<a id="line-443" name="line-443"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dgcr</span><span class="o">-></span><span class="n">dgc</span><span class="p">);</span> +<a id="line-444" name="line-444"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dgcr</span><span class="p">);</span> +<a id="line-445" name="line-445"></a> +<a id="line-446" name="line-446"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-447" name="line-447"></a><span class="p">}</span> +<a id="line-448" name="line-448"></a> +<a id="line-449" name="line-449"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-450" name="line-450"></a><span class="nf">do_general_command</span><span class="p">(</span><span class="n">GIOChannel</span><span class="w"> </span><span class="o">*</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dcac</span><span class="p">,</span> +<a id="line-451" name="line-451"></a><span class="w"> </span><span class="n">GError</span><span class="w"> </span><span class="o">**</span><span class="n">gerr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-452" name="line-452"></a><span class="w"> </span><span class="n">GError</span><span class="w"> </span><span class="o">*</span><span class="n">tmp_gerr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-453" name="line-453"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">response</span><span class="p">;</span> +<a id="line-454" name="line-454"></a> +<a id="line-455" name="line-455"></a><span class="w"> </span><span class="cm">/* send status command to server */</span> +<a id="line-456" name="line-456"></a><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">send_command_to_db</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span><span class="p">,</span> +<a id="line-457" name="line-457"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tmp_gerr</span><span class="p">);</span> +<a id="line-458" name="line-458"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tmp_gerr</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-459" name="line-459"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">response</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-460" name="line-460"></a><span class="w"> </span><span class="n">g_propagate_error</span><span class="p">(</span><span class="n">gerr</span><span class="p">,</span><span class="w"> </span><span class="n">tmp_gerr</span><span class="p">);</span> +<a id="line-461" name="line-461"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-462" name="line-462"></a><span class="w"> </span><span class="p">}</span> +<a id="line-463" name="line-463"></a> +<a id="line-464" name="line-464"></a><span class="w"> </span><span class="cm">/* great, the server did the command perfectly,</span> +<a id="line-465" name="line-465"></a><span class="cm"> now call the handler with the response */</span> +<a id="line-466" name="line-466"></a><span class="w"> </span><span class="p">{</span> +<a id="line-467" name="line-467"></a><span class="w"> </span><span class="n">DropboxGeneralCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dgcr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommandResponse</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-468" name="line-468"></a><span class="w"> </span><span class="n">dgcr</span><span class="o">-></span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dcac</span><span class="p">;</span> +<a id="line-469" name="line-469"></a><span class="w"> </span><span class="n">dgcr</span><span class="o">-></span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">response</span><span class="p">;</span> +<a id="line-470" name="line-470"></a><span class="w"> </span><span class="n">finish_general_command</span><span class="p">(</span><span class="n">dgcr</span><span class="p">);</span> +<a id="line-471" name="line-471"></a><span class="w"> </span><span class="p">}</span> +<a id="line-472" name="line-472"></a> +<a id="line-473" name="line-473"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-474" name="line-474"></a><span class="p">}</span> +<a id="line-475" name="line-475"></a> +<a id="line-476" name="line-476"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span> +<a id="line-477" name="line-477"></a><span class="nf">check_connection</span><span class="p">(</span><span class="n">GIOChannel</span><span class="w"> </span><span class="o">*</span><span class="n">chan</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-478" name="line-478"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="n">fake_buf</span><span class="p">[</span><span class="mi">4096</span><span class="p">];</span> +<a id="line-479" name="line-479"></a><span class="w"> </span><span class="n">gsize</span><span class="w"> </span><span class="n">bytes_read</span><span class="p">;</span> +<a id="line-480" name="line-480"></a><span class="w"> </span><span class="n">GError</span><span class="w"> </span><span class="o">*</span><span class="n">tmp_error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-481" name="line-481"></a><span class="w"> </span><span class="n">GIOFlags</span><span class="w"> </span><span class="n">flags</span><span class="p">;</span> +<a id="line-482" name="line-482"></a><span class="w"> </span><span class="n">GIOStatus</span><span class="w"> </span><span class="n">ret</span><span class="p">,</span><span class="w"> </span><span class="n">iostat</span><span class="p">;</span> +<a id="line-483" name="line-483"></a> +<a id="line-484" name="line-484"></a><span class="w"> </span><span class="n">flags</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_get_flags</span><span class="p">(</span><span class="n">chan</span><span class="p">);</span> +<a id="line-485" name="line-485"></a> +<a id="line-486" name="line-486"></a><span class="w"> </span><span class="cm">/* set non-blocking */</span> +<a id="line-487" name="line-487"></a><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_set_flags</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">flags</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">G_IO_FLAG_NONBLOCK</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-488" name="line-488"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_ERROR</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-489" name="line-489"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-490" name="line-490"></a><span class="w"> </span><span class="p">}</span> +<a id="line-491" name="line-491"></a> +<a id="line-492" name="line-492"></a><span class="w"> </span><span class="n">iostat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_read_chars</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">fake_buf</span><span class="p">,</span> +<a id="line-493" name="line-493"></a><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">fake_buf</span><span class="p">),</span> +<a id="line-494" name="line-494"></a><span class="w"> </span><span class="o">&</span><span class="n">bytes_read</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tmp_error</span><span class="p">);</span> +<a id="line-495" name="line-495"></a> +<a id="line-496" name="line-496"></a><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_set_flags</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">flags</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-497" name="line-497"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_ERROR</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-498" name="line-498"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-499" name="line-499"></a><span class="w"> </span><span class="p">}</span> +<a id="line-500" name="line-500"></a> +<a id="line-501" name="line-501"></a><span class="w"> </span><span class="cm">/* this makes us disconnect from bad servers</span> +<a id="line-502" name="line-502"></a><span class="cm"> (those that send us information without us asking for it) */</span> +<a id="line-503" name="line-503"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">iostat</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">G_IO_STATUS_AGAIN</span><span class="p">;</span> +<a id="line-504" name="line-504"></a><span class="p">}</span> +<a id="line-505" name="line-505"></a> +<a id="line-506" name="line-506"></a><span class="k">static</span><span class="w"> </span><span class="n">gpointer</span> +<a id="line-507" name="line-507"></a><span class="nf">dropbox_command_client_thread</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">data</span><span class="p">);</span> +<a id="line-508" name="line-508"></a> +<a id="line-509" name="line-509"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-510" name="line-510"></a><span class="nf">end_request</span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-511" name="line-511"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">gpointer</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="p">)(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">data</span><span class="p">))</span><span class="w"> </span><span class="n">dc</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="o">&</span><span class="n">dropbox_command_client_thread</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-512" name="line-512"></a><span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">request_type</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-513" name="line-513"></a><span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">GET_FILE_INFO</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> +<a id="line-514" name="line-514"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dc</span><span class="p">;</span> +<a id="line-515" name="line-515"></a><span class="w"> </span><span class="n">DropboxFileInfoCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dficr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-516" name="line-516"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dfic</span><span class="p">;</span> +<a id="line-517" name="line-517"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-518" name="line-518"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-519" name="line-519"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_finish_file_info_command</span><span class="p">,</span><span class="w"> </span><span class="n">dficr</span><span class="p">);</span> +<a id="line-520" name="line-520"></a><span class="w"> </span><span class="p">}</span> +<a id="line-521" name="line-521"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-522" name="line-522"></a><span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">GENERAL_COMMAND</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> +<a id="line-523" name="line-523"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dc</span><span class="p">;</span> +<a id="line-524" name="line-524"></a><span class="w"> </span><span class="n">DropboxGeneralCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dgcr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommandResponse</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-525" name="line-525"></a><span class="w"> </span><span class="n">dgcr</span><span class="o">-></span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dgc</span><span class="p">;</span> +<a id="line-526" name="line-526"></a><span class="w"> </span><span class="n">dgcr</span><span class="o">-></span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-527" name="line-527"></a><span class="w"> </span><span class="n">finish_general_command</span><span class="p">(</span><span class="n">dgcr</span><span class="p">);</span> +<a id="line-528" name="line-528"></a><span class="w"> </span><span class="p">}</span> +<a id="line-529" name="line-529"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-530" name="line-530"></a><span class="w"> </span><span class="k">default</span><span class="o">:</span> +<a id="line-531" name="line-531"></a><span class="w"> </span><span class="n">g_assert_not_reached</span><span class="p">();</span> +<a id="line-532" name="line-532"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-533" name="line-533"></a><span class="w"> </span><span class="p">}</span> +<a id="line-534" name="line-534"></a><span class="w"> </span><span class="p">}</span> +<a id="line-535" name="line-535"></a><span class="p">}</span> +<a id="line-536" name="line-536"></a> +<a id="line-537" name="line-537"></a> +<a id="line-538" name="line-538"></a><span class="k">static</span><span class="w"> </span><span class="n">gpointer</span> +<a id="line-539" name="line-539"></a><span class="nf">dropbox_command_client_thread</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-540" name="line-540"></a><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">sockaddr_un</span><span class="w"> </span><span class="n">addr</span><span class="p">;</span> +<a id="line-541" name="line-541"></a><span class="w"> </span><span class="kt">socklen_t</span><span class="w"> </span><span class="n">addr_len</span><span class="p">;</span> +<a id="line-542" name="line-542"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connection_attempts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> +<a id="line-543" name="line-543"></a> +<a id="line-544" name="line-544"></a><span class="w"> </span><span class="cm">/* intialize address structure */</span> +<a id="line-545" name="line-545"></a><span class="w"> </span><span class="n">addr</span><span class="p">.</span><span class="n">sun_family</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AF_UNIX</span><span class="p">;</span> +<a id="line-546" name="line-546"></a><span class="w"> </span><span class="n">g_snprintf</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">,</span> +<a id="line-547" name="line-547"></a><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">),</span> +<a id="line-548" name="line-548"></a><span class="w"> </span><span class="s">"%s/.dropbox/command_socket"</span><span class="p">,</span> +<a id="line-549" name="line-549"></a><span class="w"> </span><span class="n">g_get_home_dir</span><span class="p">());</span> +<a id="line-550" name="line-550"></a><span class="w"> </span><span class="n">addr_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">addr</span><span class="p">.</span><span class="n">sun_path</span><span class="p">);</span> +<a id="line-551" name="line-551"></a> +<a id="line-552" name="line-552"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-553" name="line-553"></a><span class="w"> </span><span class="n">GIOChannel</span><span class="w"> </span><span class="o">*</span><span class="n">chan</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-554" name="line-554"></a><span class="w"> </span><span class="n">GError</span><span class="w"> </span><span class="o">*</span><span class="n">gerr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-555" name="line-555"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">sock</span><span class="p">;</span> +<a id="line-556" name="line-556"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">failflag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-557" name="line-557"></a> +<a id="line-558" name="line-558"></a><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="p">{</span> +<a id="line-559" name="line-559"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">flags</span><span class="p">;</span> +<a id="line-560" name="line-560"></a> +<a id="line-561" name="line-561"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="p">(</span><span class="n">sock</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">socket</span><span class="p">(</span><span class="n">PF_UNIX</span><span class="p">,</span><span class="w"> </span><span class="n">SOCK_STREAM</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span> +<a id="line-562" name="line-562"></a><span class="w"> </span><span class="cm">/* WTF */</span> +<a id="line-563" name="line-563"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-564" name="line-564"></a><span class="w"> </span><span class="p">}</span> +<a id="line-565" name="line-565"></a> +<a id="line-566" name="line-566"></a><span class="w"> </span><span class="cm">/* set timeout on socket, to protect against</span> +<a id="line-567" name="line-567"></a><span class="cm"> bad servers */</span> +<a id="line-568" name="line-568"></a><span class="w"> </span><span class="p">{</span> +<a id="line-569" name="line-569"></a><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">timeval</span><span class="w"> </span><span class="n">tv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">};</span> +<a id="line-570" name="line-570"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">setsockopt</span><span class="p">(</span><span class="n">sock</span><span class="p">,</span><span class="w"> </span><span class="n">SOL_SOCKET</span><span class="p">,</span><span class="w"> </span><span class="n">SO_RCVTIMEO</span><span class="p">,</span> +<a id="line-571" name="line-571"></a><span class="w"> </span><span class="o">&</span><span class="n">tv</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">timeval</span><span class="p">))</span><span class="w"> </span><span class="o">||</span> +<a id="line-572" name="line-572"></a><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">setsockopt</span><span class="p">(</span><span class="n">sock</span><span class="p">,</span><span class="w"> </span><span class="n">SOL_SOCKET</span><span class="p">,</span><span class="w"> </span><span class="n">SO_SNDTIMEO</span><span class="p">,</span> +<a id="line-573" name="line-573"></a><span class="w"> </span><span class="o">&</span><span class="n">tv</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">timeval</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span> +<a id="line-574" name="line-574"></a><span class="w"> </span><span class="cm">/* debug("setsockopt failed"); */</span> +<a id="line-575" name="line-575"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-576" name="line-576"></a><span class="w"> </span><span class="p">}</span> +<a id="line-577" name="line-577"></a><span class="w"> </span><span class="p">}</span> +<a id="line-578" name="line-578"></a> +<a id="line-579" name="line-579"></a><span class="w"> </span><span class="cm">/* set native non-blocking, for connect timeout */</span> +<a id="line-580" name="line-580"></a><span class="w"> </span><span class="p">{</span> +<a id="line-581" name="line-581"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">flags</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fcntl</span><span class="p">(</span><span class="n">sock</span><span class="p">,</span><span class="w"> </span><span class="n">F_GETFL</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span> +<a id="line-582" name="line-582"></a><span class="w"> </span><span class="n">fcntl</span><span class="p">(</span><span class="n">sock</span><span class="p">,</span><span class="w"> </span><span class="n">F_SETFL</span><span class="p">,</span><span class="w"> </span><span class="n">flags</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">O_NONBLOCK</span><span class="p">)</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-583" name="line-583"></a><span class="w"> </span><span class="cm">/* debug("fcntl failed"); */</span> +<a id="line-584" name="line-584"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-585" name="line-585"></a><span class="w"> </span><span class="p">}</span> +<a id="line-586" name="line-586"></a><span class="w"> </span><span class="p">}</span> +<a id="line-587" name="line-587"></a> +<a id="line-588" name="line-588"></a><span class="w"> </span><span class="cm">/* if there was an error we have to try again later */</span> +<a id="line-589" name="line-589"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">connect</span><span class="p">(</span><span class="n">sock</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">sockaddr</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="o">&</span><span class="n">addr</span><span class="p">,</span><span class="w"> </span><span class="n">addr_len</span><span class="p">)</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-590" name="line-590"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">errno</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">EINPROGRESS</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-591" name="line-591"></a><span class="w"> </span><span class="n">fd_set</span><span class="w"> </span><span class="n">writers</span><span class="p">;</span> +<a id="line-592" name="line-592"></a><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">timeval</span><span class="w"> </span><span class="n">tv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">};</span> +<a id="line-593" name="line-593"></a> +<a id="line-594" name="line-594"></a><span class="w"> </span><span class="n">FD_ZERO</span><span class="p">(</span><span class="o">&</span><span class="n">writers</span><span class="p">);</span> +<a id="line-595" name="line-595"></a><span class="w"> </span><span class="n">FD_SET</span><span class="p">(</span><span class="n">sock</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">writers</span><span class="p">);</span> +<a id="line-596" name="line-596"></a> +<a id="line-597" name="line-597"></a><span class="w"> </span><span class="cm">/* if nothing was ready after 3 seconds, fail out homie */</span> +<a id="line-598" name="line-598"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">select</span><span class="p">(</span><span class="n">sock</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">writers</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">tv</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-599" name="line-599"></a><span class="w"> </span><span class="cm">/* debug("connection timeout"); */</span> +<a id="line-600" name="line-600"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-601" name="line-601"></a><span class="w"> </span><span class="p">}</span> +<a id="line-602" name="line-602"></a> +<a id="line-603" name="line-603"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">connect</span><span class="p">(</span><span class="n">sock</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">sockaddr</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="o">&</span><span class="n">addr</span><span class="p">,</span><span class="w"> </span><span class="n">addr_len</span><span class="p">)</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-604" name="line-604"></a><span class="w"> </span><span class="cm">/* debug("couldn't connect to command server after 1 second"); */</span> +<a id="line-605" name="line-605"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-606" name="line-606"></a><span class="w"> </span><span class="p">}</span> +<a id="line-607" name="line-607"></a><span class="w"> </span><span class="p">}</span> +<a id="line-608" name="line-608"></a><span class="w"> </span><span class="cm">/* errno != EINPROGRESS */</span> +<a id="line-609" name="line-609"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-610" name="line-610"></a><span class="w"> </span><span class="cm">/* debug("bad connection"); */</span> +<a id="line-611" name="line-611"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-612" name="line-612"></a><span class="w"> </span><span class="p">}</span> +<a id="line-613" name="line-613"></a><span class="w"> </span><span class="p">}</span> +<a id="line-614" name="line-614"></a> +<a id="line-615" name="line-615"></a><span class="w"> </span><span class="cm">/* set back to blocking */</span> +<a id="line-616" name="line-616"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">fcntl</span><span class="p">(</span><span class="n">sock</span><span class="p">,</span><span class="w"> </span><span class="n">F_SETFL</span><span class="p">,</span><span class="w"> </span><span class="n">flags</span><span class="p">)</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-617" name="line-617"></a><span class="w"> </span><span class="cm">/* debug("fcntl2 failed"); */</span> +<a id="line-618" name="line-618"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-619" name="line-619"></a><span class="w"> </span><span class="p">}</span> +<a id="line-620" name="line-620"></a> +<a id="line-621" name="line-621"></a><span class="w"> </span><span class="n">failflag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-622" name="line-622"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="p">);</span> +<a id="line-623" name="line-623"></a> +<a id="line-624" name="line-624"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">failflag</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-625" name="line-625"></a><span class="w"> </span><span class="n">ConnectionAttempt</span><span class="w"> </span><span class="o">*</span><span class="n">ca</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">ConnectionAttempt</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-626" name="line-626"></a><span class="w"> </span><span class="n">ca</span><span class="o">-></span><span class="n">dcc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dcc</span><span class="p">;</span> +<a id="line-627" name="line-627"></a><span class="w"> </span><span class="n">ca</span><span class="o">-></span><span class="n">connect_attempt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">connection_attempts</span><span class="p">;</span> +<a id="line-628" name="line-628"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">on_connection_attempt</span><span class="p">,</span><span class="w"> </span><span class="n">ca</span><span class="p">);</span> +<a id="line-629" name="line-629"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">sock</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-630" name="line-630"></a><span class="w"> </span><span class="n">close</span><span class="p">(</span><span class="n">sock</span><span class="p">);</span> +<a id="line-631" name="line-631"></a><span class="w"> </span><span class="p">}</span> +<a id="line-632" name="line-632"></a><span class="w"> </span><span class="n">g_usleep</span><span class="p">(</span><span class="n">G_USEC_PER_SEC</span><span class="p">);</span> +<a id="line-633" name="line-633"></a><span class="w"> </span><span class="n">connection_attempts</span><span class="o">++</span><span class="p">;</span> +<a id="line-634" name="line-634"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span> +<a id="line-635" name="line-635"></a><span class="w"> </span><span class="p">}</span> +<a id="line-636" name="line-636"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-637" name="line-637"></a><span class="w"> </span><span class="n">connection_attempts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-638" name="line-638"></a><span class="w"> </span><span class="p">}</span> +<a id="line-639" name="line-639"></a> +<a id="line-640" name="line-640"></a><span class="w"> </span><span class="cm">/* connected */</span> +<a id="line-641" name="line-641"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"command client connected"</span><span class="p">);</span> +<a id="line-642" name="line-642"></a> +<a id="line-643" name="line-643"></a><span class="w"> </span><span class="n">chan</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_io_channel_unix_new</span><span class="p">(</span><span class="n">sock</span><span class="p">);</span> +<a id="line-644" name="line-644"></a><span class="w"> </span><span class="n">g_io_channel_set_close_on_unref</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span> +<a id="line-645" name="line-645"></a><span class="w"> </span><span class="n">g_io_channel_set_line_term</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span> +<a id="line-646" name="line-646"></a> +<a id="line-647" name="line-647"></a><span class="cp">#define SET_CONNECTED_STATE(s) { \</span> +<a id="line-648" name="line-648"></a><span class="cp"> g_mutex_lock(&(dcc->command_connected_mutex)); \</span> +<a id="line-649" name="line-649"></a><span class="cp"> dcc->command_connected = s; \</span> +<a id="line-650" name="line-650"></a><span class="cp"> g_mutex_unlock(&(dcc->command_connected_mutex)); \</span> +<a id="line-651" name="line-651"></a><span class="cp"> }</span> +<a id="line-652" name="line-652"></a> +<a id="line-653" name="line-653"></a><span class="w"> </span><span class="n">SET_CONNECTED_STATE</span><span class="p">(</span><span class="n">TRUE</span><span class="p">);</span> +<a id="line-654" name="line-654"></a> +<a id="line-655" name="line-655"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">on_connect</span><span class="p">,</span><span class="w"> </span><span class="n">dcc</span><span class="p">);</span> +<a id="line-656" name="line-656"></a> +<a id="line-657" name="line-657"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-658" name="line-658"></a><span class="w"> </span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">;</span> +<a id="line-659" name="line-659"></a> +<a id="line-660" name="line-660"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-661" name="line-661"></a> +<a id="line-662" name="line-662"></a><span class="w"> </span><span class="cm">/* get a request from caja */</span> +<a id="line-663" name="line-663"></a><span class="w"> </span><span class="n">dc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">command_queue</span><span class="p">,</span><span class="w"> </span><span class="n">G_USEC_PER_SEC</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">10</span><span class="p">);</span> +<a id="line-664" name="line-664"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dc</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-665" name="line-665"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-666" name="line-666"></a><span class="w"> </span><span class="p">}</span> +<a id="line-667" name="line-667"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-668" name="line-668"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">check_connection</span><span class="p">(</span><span class="n">chan</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-669" name="line-669"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">BADCONNECTION</span><span class="p">;</span> +<a id="line-670" name="line-670"></a><span class="w"> </span><span class="p">}</span> +<a id="line-671" name="line-671"></a><span class="w"> </span><span class="p">}</span> +<a id="line-672" name="line-672"></a><span class="w"> </span><span class="p">}</span> +<a id="line-673" name="line-673"></a> +<a id="line-674" name="line-674"></a><span class="w"> </span><span class="cm">/* this pointer should be unique */</span> +<a id="line-675" name="line-675"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">gpointer</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="p">)(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">data</span><span class="p">))</span><span class="w"> </span><span class="n">dc</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="o">&</span><span class="n">dropbox_command_client_thread</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-676" name="line-676"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"got a reset request"</span><span class="p">);</span> +<a id="line-677" name="line-677"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">BADCONNECTION</span><span class="p">;</span> +<a id="line-678" name="line-678"></a><span class="w"> </span><span class="p">}</span> +<a id="line-679" name="line-679"></a> +<a id="line-680" name="line-680"></a><span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">request_type</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-681" name="line-681"></a><span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">GET_FILE_INFO</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> +<a id="line-682" name="line-682"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"doing file info command"</span><span class="p">);</span> +<a id="line-683" name="line-683"></a><span class="w"> </span><span class="n">do_file_info_command</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dc</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">gerr</span><span class="p">);</span> +<a id="line-684" name="line-684"></a><span class="w"> </span><span class="p">}</span> +<a id="line-685" name="line-685"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-686" name="line-686"></a><span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">GENERAL_COMMAND</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> +<a id="line-687" name="line-687"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"doing general command"</span><span class="p">);</span> +<a id="line-688" name="line-688"></a><span class="w"> </span><span class="n">do_general_command</span><span class="p">(</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dc</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">gerr</span><span class="p">);</span> +<a id="line-689" name="line-689"></a><span class="w"> </span><span class="p">}</span> +<a id="line-690" name="line-690"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-691" name="line-691"></a><span class="w"> </span><span class="k">default</span><span class="o">:</span> +<a id="line-692" name="line-692"></a><span class="w"> </span><span class="n">g_assert_not_reached</span><span class="p">();</span> +<a id="line-693" name="line-693"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-694" name="line-694"></a><span class="w"> </span><span class="p">}</span> +<a id="line-695" name="line-695"></a> +<a id="line-696" name="line-696"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"done."</span><span class="p">);</span> +<a id="line-697" name="line-697"></a> +<a id="line-698" name="line-698"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">gerr</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-699" name="line-699"></a><span class="w"> </span><span class="c1">// debug("COMMAND ERROR*****************************");</span> +<a id="line-700" name="line-700"></a><span class="w"> </span><span class="cm">/* mark this request as never to be completed */</span> +<a id="line-701" name="line-701"></a><span class="w"> </span><span class="n">end_request</span><span class="p">(</span><span class="n">dc</span><span class="p">);</span> +<a id="line-702" name="line-702"></a> +<a id="line-703" name="line-703"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"command error: %s"</span><span class="p">,</span><span class="w"> </span><span class="n">gerr</span><span class="o">-></span><span class="n">message</span><span class="p">);</span> +<a id="line-704" name="line-704"></a> +<a id="line-705" name="line-705"></a><span class="w"> </span><span class="n">g_error_free</span><span class="p">(</span><span class="n">gerr</span><span class="p">);</span> +<a id="line-706" name="line-706"></a><span class="w"> </span><span class="nl">BADCONNECTION</span><span class="p">:</span> +<a id="line-707" name="line-707"></a><span class="w"> </span><span class="cm">/* grab all the rest of the data off the async queue and mark it</span> +<a id="line-708" name="line-708"></a><span class="cm"> never to be completed, who knows how long we'll be disconnected */</span> +<a id="line-709" name="line-709"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">((</span><span class="n">dc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_try_pop</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">command_queue</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-710" name="line-710"></a><span class="w"> </span><span class="n">end_request</span><span class="p">(</span><span class="n">dc</span><span class="p">);</span> +<a id="line-711" name="line-711"></a><span class="w"> </span><span class="p">}</span> +<a id="line-712" name="line-712"></a> +<a id="line-713" name="line-713"></a><span class="w"> </span><span class="n">g_io_channel_unref</span><span class="p">(</span><span class="n">chan</span><span class="p">);</span> +<a id="line-714" name="line-714"></a> +<a id="line-715" name="line-715"></a><span class="w"> </span><span class="n">SET_CONNECTED_STATE</span><span class="p">(</span><span class="n">FALSE</span><span class="p">);</span> +<a id="line-716" name="line-716"></a> +<a id="line-717" name="line-717"></a><span class="w"> </span><span class="cm">/* call the disconnect handler */</span> +<a id="line-718" name="line-718"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">on_disconnect</span><span class="p">,</span><span class="w"> </span><span class="n">dcc</span><span class="p">);</span> +<a id="line-719" name="line-719"></a> +<a id="line-720" name="line-720"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-721" name="line-721"></a><span class="w"> </span><span class="p">}</span> +<a id="line-722" name="line-722"></a><span class="w"> </span><span class="p">}</span> +<a id="line-723" name="line-723"></a> +<a id="line-724" name="line-724"></a><span class="cp">#undef SET_CONNECTED_STATE</span> +<a id="line-725" name="line-725"></a><span class="w"> </span><span class="p">}</span> +<a id="line-726" name="line-726"></a> +<a id="line-727" name="line-727"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-728" name="line-728"></a><span class="p">}</span> +<a id="line-729" name="line-729"></a> +<a id="line-730" name="line-730"></a><span class="cm">/* thread safe */</span> +<a id="line-731" name="line-731"></a><span class="n">gboolean</span> +<a id="line-732" name="line-732"></a><span class="nf">dropbox_command_client_is_connected</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-733" name="line-733"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">command_connected</span><span class="p">;</span> +<a id="line-734" name="line-734"></a> +<a id="line-735" name="line-735"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">command_connected_mutex</span><span class="p">));</span> +<a id="line-736" name="line-736"></a><span class="w"> </span><span class="n">command_connected</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dcc</span><span class="o">-></span><span class="n">command_connected</span><span class="p">;</span> +<a id="line-737" name="line-737"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">command_connected_mutex</span><span class="p">));</span> +<a id="line-738" name="line-738"></a> +<a id="line-739" name="line-739"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">command_connected</span><span class="p">;</span> +<a id="line-740" name="line-740"></a><span class="p">}</span> +<a id="line-741" name="line-741"></a> +<a id="line-742" name="line-742"></a><span class="cm">/* thread safe */</span> +<a id="line-743" name="line-743"></a><span class="kt">void</span><span class="w"> </span><span class="nf">dropbox_command_client_force_reconnect</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-744" name="line-744"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dropbox_command_client_is_connected</span><span class="p">(</span><span class="n">dcc</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">TRUE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-745" name="line-745"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"forcing command to reconnect"</span><span class="p">);</span> +<a id="line-746" name="line-746"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="n">dcc</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="o">&</span><span class="n">dropbox_command_client_thread</span><span class="p">);</span> +<a id="line-747" name="line-747"></a><span class="w"> </span><span class="p">}</span> +<a id="line-748" name="line-748"></a><span class="p">}</span> +<a id="line-749" name="line-749"></a> +<a id="line-750" name="line-750"></a><span class="cm">/* thread safe */</span> +<a id="line-751" name="line-751"></a><span class="kt">void</span> +<a id="line-752" name="line-752"></a><span class="nf">dropbox_command_client_request</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span><span class="w"> </span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-753" name="line-753"></a><span class="w"> </span><span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">command_queue</span><span class="p">,</span><span class="w"> </span><span class="n">dc</span><span class="p">);</span> +<a id="line-754" name="line-754"></a><span class="p">}</span> +<a id="line-755" name="line-755"></a> +<a id="line-756" name="line-756"></a><span class="cm">/* should only be called once on initialization */</span> +<a id="line-757" name="line-757"></a><span class="kt">void</span> +<a id="line-758" name="line-758"></a><span class="nf">dropbox_command_client_setup</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-759" name="line-759"></a><span class="w"> </span><span class="n">dcc</span><span class="o">-></span><span class="n">command_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_new</span><span class="p">();</span> +<a id="line-760" name="line-760"></a><span class="w"> </span><span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">command_connected_mutex</span><span class="p">));</span> +<a id="line-761" name="line-761"></a><span class="w"> </span><span class="n">dcc</span><span class="o">-></span><span class="n">command_connected</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-762" name="line-762"></a><span class="w"> </span><span class="n">dcc</span><span class="o">-></span><span class="n">ca_hooklist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-763" name="line-763"></a> +<a id="line-764" name="line-764"></a><span class="w"> </span><span class="n">g_hook_list_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">GHook</span><span class="p">));</span> +<a id="line-765" name="line-765"></a><span class="w"> </span><span class="n">g_hook_list_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">GHook</span><span class="p">));</span> +<a id="line-766" name="line-766"></a><span class="p">}</span> +<a id="line-767" name="line-767"></a> +<a id="line-768" name="line-768"></a><span class="kt">void</span> +<a id="line-769" name="line-769"></a><span class="nf">dropbox_command_client_add_on_disconnect_hook</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span> +<a id="line-770" name="line-770"></a><span class="w"> </span><span class="n">DropboxCommandClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-771" name="line-771"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-772" name="line-772"></a><span class="w"> </span><span class="n">GHook</span><span class="w"> </span><span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a id="line-773" name="line-773"></a> +<a id="line-774" name="line-774"></a><span class="w"> </span><span class="n">newhook</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hook_alloc</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">));</span> +<a id="line-775" name="line-775"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dhcch</span><span class="p">;</span> +<a id="line-776" name="line-776"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-777" name="line-777"></a> +<a id="line-778" name="line-778"></a><span class="w"> </span><span class="n">g_hook_append</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">newhook</span><span class="p">);</span> +<a id="line-779" name="line-779"></a><span class="p">}</span> +<a id="line-780" name="line-780"></a> +<a id="line-781" name="line-781"></a><span class="kt">void</span> +<a id="line-782" name="line-782"></a><span class="nf">dropbox_command_client_add_on_connect_hook</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span> +<a id="line-783" name="line-783"></a><span class="w"> </span><span class="n">DropboxCommandClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-784" name="line-784"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-785" name="line-785"></a><span class="w"> </span><span class="n">GHook</span><span class="w"> </span><span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a id="line-786" name="line-786"></a> +<a id="line-787" name="line-787"></a><span class="w"> </span><span class="n">newhook</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hook_alloc</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">));</span> +<a id="line-788" name="line-788"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dhcch</span><span class="p">;</span> +<a id="line-789" name="line-789"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-790" name="line-790"></a> +<a id="line-791" name="line-791"></a><span class="w"> </span><span class="n">g_hook_append</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">newhook</span><span class="p">);</span> +<a id="line-792" name="line-792"></a><span class="p">}</span> +<a id="line-793" name="line-793"></a> +<a id="line-794" name="line-794"></a><span class="kt">void</span> +<a id="line-795" name="line-795"></a><span class="nf">dropbox_command_client_add_connection_attempt_hook</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span> +<a id="line-796" name="line-796"></a><span class="w"> </span><span class="n">DropboxCommandClientConnectionAttemptHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-797" name="line-797"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-798" name="line-798"></a><span class="w"> </span><span class="n">DropboxCommandClientConnectionAttempt</span><span class="w"> </span><span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a id="line-799" name="line-799"></a> +<a id="line-800" name="line-800"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shouldn't be here..."</span><span class="p">);</span> +<a id="line-801" name="line-801"></a> +<a id="line-802" name="line-802"></a><span class="w"> </span><span class="n">newhook</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">DropboxCommandClientConnectionAttempt</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-803" name="line-803"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">h</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dhcch</span><span class="p">;</span> +<a id="line-804" name="line-804"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-805" name="line-805"></a> +<a id="line-806" name="line-806"></a><span class="w"> </span><span class="n">dcc</span><span class="o">-></span><span class="n">ca_hooklist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_append</span><span class="p">(</span><span class="n">dcc</span><span class="o">-></span><span class="n">ca_hooklist</span><span class="p">,</span><span class="w"> </span><span class="n">newhook</span><span class="p">);</span> +<a id="line-807" name="line-807"></a><span class="p">}</span> +<a id="line-808" name="line-808"></a> +<a id="line-809" name="line-809"></a><span class="cm">/* should only be called once on initialization */</span> +<a id="line-810" name="line-810"></a><span class="kt">void</span> +<a id="line-811" name="line-811"></a><span class="nf">dropbox_command_client_start</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-812" name="line-812"></a><span class="w"> </span><span class="cm">/* setup the connect to the command server */</span> +<a id="line-813" name="line-813"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"starting command thread"</span><span class="p">);</span> +<a id="line-814" name="line-814"></a><span class="w"> </span><span class="n">g_thread_new</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GThreadFunc</span><span class="p">)</span><span class="w"> </span><span class="n">dropbox_command_client_thread</span><span class="p">,</span><span class="w"> </span><span class="n">dcc</span><span class="p">);</span> +<a id="line-815" name="line-815"></a><span class="p">}</span> +<a id="line-816" name="line-816"></a> +<a id="line-817" name="line-817"></a><span class="cm">/* thread safe */</span> +<a id="line-818" name="line-818"></a><span class="kt">void</span><span class="w"> </span><span class="nf">dropbox_command_client_send_simple_command</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span> +<a id="line-819" name="line-819"></a><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">command</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-820" name="line-820"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dgc</span><span class="p">;</span> +<a id="line-821" name="line-821"></a> +<a id="line-822" name="line-822"></a><span class="w"> </span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-823" name="line-823"></a> +<a id="line-824" name="line-824"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a id="line-825" name="line-825"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">command</span><span class="p">);</span> +<a id="line-826" name="line-826"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-827" name="line-827"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-828" name="line-828"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-829" name="line-829"></a> +<a id="line-830" name="line-830"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="n">dcc</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dgc</span><span class="p">);</span> +<a id="line-831" name="line-831"></a><span class="p">}</span> +<a id="line-832" name="line-832"></a> +<a id="line-833" name="line-833"></a><span class="cm">/* thread safe */</span> +<a id="line-834" name="line-834"></a><span class="cm">/* this is the C API, there is another send_command_to_db</span> +<a id="line-835" name="line-835"></a><span class="cm"> that is more the actual over the wire command */</span> +<a id="line-836" name="line-836"></a><span class="kt">void</span><span class="w"> </span><span class="nf">dropbox_command_client_send_command</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span> +<a id="line-837" name="line-837"></a><span class="w"> </span><span class="n">CajaDropboxCommandResponseHandler</span><span class="w"> </span><span class="n">h</span><span class="p">,</span> +<a id="line-838" name="line-838"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">,</span> +<a id="line-839" name="line-839"></a><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">command</span><span class="p">,</span><span class="w"> </span><span class="p">...)</span><span class="w"> </span><span class="p">{</span> +<a id="line-840" name="line-840"></a><span class="w"> </span><span class="kt">va_list</span><span class="w"> </span><span class="n">ap</span><span class="p">;</span> +<a id="line-841" name="line-841"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dgc</span><span class="p">;</span> +<a id="line-842" name="line-842"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">na</span><span class="p">;</span> +<a id="line-843" name="line-843"></a><span class="w"> </span><span class="n">va_start</span><span class="p">(</span><span class="n">ap</span><span class="p">,</span><span class="w"> </span><span class="n">command</span><span class="p">);</span> +<a id="line-844" name="line-844"></a> +<a id="line-845" name="line-845"></a><span class="w"> </span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-846" name="line-846"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a id="line-847" name="line-847"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">command</span><span class="p">);</span> +<a id="line-848" name="line-848"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-849" name="line-849"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-850" name="line-850"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span> +<a id="line-851" name="line-851"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span> +<a id="line-852" name="line-852"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-853" name="line-853"></a><span class="cm"> * NB: The handler is called in the DropboxCommandClient Thread. If you need</span> +<a id="line-854" name="line-854"></a><span class="cm"> * it in the main thread you must call g_idle_add in the callback.</span> +<a id="line-855" name="line-855"></a><span class="cm"> */</span> +<a id="line-856" name="line-856"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">h</span><span class="p">;</span> +<a id="line-857" name="line-857"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-858" name="line-858"></a> +<a id="line-859" name="line-859"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">((</span><span class="n">na</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">va_arg</span><span class="p">(</span><span class="n">ap</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-860" name="line-860"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">is_active_arg</span><span class="p">;</span> +<a id="line-861" name="line-861"></a> +<a id="line-862" name="line-862"></a><span class="w"> </span><span class="n">is_active_arg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span> +<a id="line-863" name="line-863"></a> +<a id="line-864" name="line-864"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> +<a id="line-865" name="line-865"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">na</span><span class="p">),</span><span class="w"> </span><span class="n">is_active_arg</span><span class="p">);</span> +<a id="line-866" name="line-866"></a> +<a id="line-867" name="line-867"></a><span class="w"> </span><span class="n">is_active_arg</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">va_arg</span><span class="p">(</span><span class="n">ap</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="p">));</span> +<a id="line-868" name="line-868"></a><span class="w"> </span><span class="n">is_active_arg</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-869" name="line-869"></a><span class="w"> </span><span class="p">}</span> +<a id="line-870" name="line-870"></a><span class="w"> </span><span class="n">va_end</span><span class="p">(</span><span class="n">ap</span><span class="p">);</span> +<a id="line-871" name="line-871"></a> +<a id="line-872" name="line-872"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="n">dcc</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dgc</span><span class="p">);</span> +<a id="line-873" name="line-873"></a><span class="p">}</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/11.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/11.html new file mode 100644 index 0000000..4256be3 --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/11.html @@ -0,0 +1,345 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/dropbox.c</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> dropbox.c</p> +<a href="11.html#line-25"> missingIncludeSystem 25</a><a href="11.html#line-28"> missingIncludeSystem 28</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal">10</span> +<span class="normal">11</span> +<span class="normal">12</span> +<span class="normal">13</span> +<span class="normal">14</span> +<span class="normal">15</span> +<span class="normal">16</span> +<span class="normal">17</span> +<span class="normal">18</span> +<span class="normal">19</span> +<span class="normal">20</span> +<span class="normal">21</span> +<span class="normal">22</span> +<span class="normal">23</span> +<span class="normal">24</span> +<span class="normal">25</span> +<span class="normal">26</span> +<span class="normal">27</span> +<span class="normal">28</span> +<span class="normal">29</span> +<span class="normal">30</span> +<span class="normal">31</span> +<span class="normal">32</span> +<span class="normal">33</span> +<span class="normal">34</span> +<span class="normal">35</span> +<span class="normal">36</span> +<span class="normal">37</span> +<span class="normal">38</span> +<span class="normal">39</span> +<span class="normal">40</span> +<span class="normal">41</span> +<span class="normal">42</span> +<span class="normal">43</span> +<span class="normal">44</span> +<span class="normal">45</span> +<span class="normal">46</span> +<span class="normal">47</span> +<span class="normal">48</span> +<span class="normal">49</span> +<span class="normal">50</span> +<span class="normal">51</span> +<span class="normal">52</span> +<span class="normal">53</span> +<span class="normal">54</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * dropbox.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Caja module registering functions for the Dropbox extension.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a id="line-25" name="line-25"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><config.h></span><span class="error2"><--- Include file: <config.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-26" name="line-26"></a><span class="cp">#endif</span> +<a id="line-27" name="line-27"></a> +<a id="line-28" name="line-28"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib-object.h></span><span class="error2"><--- Include file: <glib-object.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-29" name="line-29"></a> +<a id="line-30" name="line-30"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox.h"</span> +<a id="line-31" name="line-31"></a> +<a id="line-32" name="line-32"></a><span class="k">static</span><span class="w"> </span><span class="n">GType</span><span class="w"> </span><span class="n">type_list</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> +<a id="line-33" name="line-33"></a> +<a id="line-34" name="line-34"></a><span class="kt">void</span> +<a id="line-35" name="line-35"></a><span class="nf">caja_module_initialize</span><span class="w"> </span><span class="p">(</span><span class="n">GTypeModule</span><span class="w"> </span><span class="o">*</span><span class="n">module</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-36" name="line-36"></a><span class="w"> </span><span class="n">g_print</span><span class="w"> </span><span class="p">(</span><span class="s">"Initializing %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">PACKAGE_STRING</span><span class="p">);</span> +<a id="line-37" name="line-37"></a> +<a id="line-38" name="line-38"></a><span class="w"> </span><span class="n">caja_dropbox_register_type</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">);</span> +<a id="line-39" name="line-39"></a><span class="w"> </span><span class="n">type_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_TYPE_DROPBOX</span><span class="p">;</span> +<a id="line-40" name="line-40"></a> +<a id="line-41" name="line-41"></a><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-42" name="line-42"></a><span class="p">}</span> +<a id="line-43" name="line-43"></a> +<a id="line-44" name="line-44"></a><span class="kt">void</span> +<a id="line-45" name="line-45"></a><span class="nf">caja_module_shutdown</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-46" name="line-46"></a><span class="w"> </span><span class="n">g_print</span><span class="w"> </span><span class="p">(</span><span class="s">"Shutting down dropbox extension</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> +<a id="line-47" name="line-47"></a><span class="p">}</span> +<a id="line-48" name="line-48"></a> +<a id="line-49" name="line-49"></a><span class="kt">void</span> +<a id="line-50" name="line-50"></a><span class="nf">caja_module_list_types</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">GType</span><span class="w"> </span><span class="o">**</span><span class="n">types</span><span class="p">,</span> +<a id="line-51" name="line-51"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">num_types</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-52" name="line-52"></a><span class="w"> </span><span class="o">*</span><span class="n">types</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">type_list</span><span class="p">;</span> +<a id="line-53" name="line-53"></a><span class="w"> </span><span class="o">*</span><span class="n">num_types</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">G_N_ELEMENTS</span><span class="w"> </span><span class="p">(</span><span class="n">type_list</span><span class="p">);</span> +<a id="line-54" name="line-54"></a><span class="p">}</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/2.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/2.html new file mode 100644 index 0000000..9bceebc --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/2.html @@ -0,0 +1,367 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/async-io-coroutine.h</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> async-io-coroutine.h</p> +<a href="2.html#line-27"> missingIncludeSystem 27</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal">10</span> +<span class="normal">11</span> +<span class="normal">12</span> +<span class="normal">13</span> +<span class="normal">14</span> +<span class="normal">15</span> +<span class="normal">16</span> +<span class="normal">17</span> +<span class="normal">18</span> +<span class="normal">19</span> +<span class="normal">20</span> +<span class="normal">21</span> +<span class="normal">22</span> +<span class="normal">23</span> +<span class="normal">24</span> +<span class="normal">25</span> +<span class="normal">26</span> +<span class="normal">27</span> +<span class="normal">28</span> +<span class="normal">29</span> +<span class="normal">30</span> +<span class="normal">31</span> +<span class="normal">32</span> +<span class="normal">33</span> +<span class="normal">34</span> +<span class="normal">35</span> +<span class="normal">36</span> +<span class="normal">37</span> +<span class="normal">38</span> +<span class="normal">39</span> +<span class="normal">40</span> +<span class="normal">41</span> +<span class="normal">42</span> +<span class="normal">43</span> +<span class="normal">44</span> +<span class="normal">45</span> +<span class="normal">46</span> +<span class="normal">47</span> +<span class="normal">48</span> +<span class="normal">49</span> +<span class="normal">50</span> +<span class="normal">51</span> +<span class="normal">52</span> +<span class="normal">53</span> +<span class="normal">54</span> +<span class="normal">55</span> +<span class="normal">56</span> +<span class="normal">57</span> +<span class="normal">58</span> +<span class="normal">59</span> +<span class="normal">60</span> +<span class="normal">61</span> +<span class="normal">62</span> +<span class="normal">63</span> +<span class="normal">64</span> +<span class="normal">65</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * async-io-coroutine.h</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Macros to simplify writing coroutines for the glib main loop.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifndef ASYNC_IO_COROUTINE_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#define ASYNC_IO_COROUTINE_H</span> +<a id="line-26" name="line-26"></a> +<a id="line-27" name="line-27"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="error2"><--- Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-28" name="line-28"></a> +<a id="line-29" name="line-29"></a><span class="n">G_BEGIN_DECLS</span> +<a id="line-30" name="line-30"></a> +<a id="line-31" name="line-31"></a><span class="cp">#define CRBEGIN(pos) switch (pos) { case 0:</span> +<a id="line-32" name="line-32"></a><span class="cp">#define CREND } return FALSE</span> +<a id="line-33" name="line-33"></a><span class="cp">#define CRYIELD(pos) do { pos = __LINE__; return TRUE; case __LINE__:;} while (0)</span> +<a id="line-34" name="line-34"></a><span class="cp">#define CRHALT return FALSE</span> +<a id="line-35" name="line-35"></a> +<a id="line-36" name="line-36"></a><span class="cp">#define CRREADLINE(pos, chan, where) \</span> +<a id="line-37" name="line-37"></a><span class="cp"> while (1) { \</span> +<a id="line-38" name="line-38"></a><span class="cp"> gchar *__line; \</span> +<a id="line-39" name="line-39"></a><span class="cp"> gsize __line_length, __newline_pos; \</span> +<a id="line-40" name="line-40"></a><span class="cp"> GIOStatus __iostat; \</span> +<a id="line-41" name="line-41"></a><span class="cp"> \</span> +<a id="line-42" name="line-42"></a><span class="cp"> __iostat = g_io_channel_read_line(chan, &__line, \</span> +<a id="line-43" name="line-43"></a><span class="cp"> &__line_length, \</span> +<a id="line-44" name="line-44"></a><span class="cp"> &__newline_pos, NULL); \</span> +<a id="line-45" name="line-45"></a><span class="cp"> if (__iostat == G_IO_STATUS_AGAIN) { \</span> +<a id="line-46" name="line-46"></a><span class="cp"> CRYIELD(pos); \</span> +<a id="line-47" name="line-47"></a><span class="cp"> } \</span> +<a id="line-48" name="line-48"></a><span class="cp"> else if (__iostat == G_IO_STATUS_NORMAL) { \</span> +<a id="line-49" name="line-49"></a><span class="cp"> *(__line + __newline_pos) = '\0'; \</span> +<a id="line-50" name="line-50"></a><span class="cp"> where = __line; \</span> +<a id="line-51" name="line-51"></a><span class="cp"> break; \</span> +<a id="line-52" name="line-52"></a><span class="cp"> } \</span> +<a id="line-53" name="line-53"></a><span class="cp"> else if (__iostat == G_IO_STATUS_EOF || \</span> +<a id="line-54" name="line-54"></a><span class="cp"> __iostat == G_IO_STATUS_ERROR) { \</span> +<a id="line-55" name="line-55"></a><span class="cp"> CRHALT; \</span> +<a id="line-56" name="line-56"></a><span class="cp"> } \</span> +<a id="line-57" name="line-57"></a><span class="cp"> else { \</span> +<a id="line-58" name="line-58"></a><span class="cp"> g_assert_not_reached(); \</span> +<a id="line-59" name="line-59"></a><span class="cp"> CRHALT; \</span> +<a id="line-60" name="line-60"></a><span class="cp"> } \</span> +<a id="line-61" name="line-61"></a><span class="cp"> }</span> +<a id="line-62" name="line-62"></a> +<a id="line-63" name="line-63"></a><span class="n">G_END_DECLS</span> +<a id="line-64" name="line-64"></a> +<a id="line-65" name="line-65"></a><span class="cp">#endif</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/3.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/3.html new file mode 100644 index 0000000..1d5b7f7 --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/3.html @@ -0,0 +1,315 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/dropbox-client-util.h</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> dropbox-client-util.h</p> +<a href="3.html#line-27"> missingIncludeSystem 27</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal">10</span> +<span class="normal">11</span> +<span class="normal">12</span> +<span class="normal">13</span> +<span class="normal">14</span> +<span class="normal">15</span> +<span class="normal">16</span> +<span class="normal">17</span> +<span class="normal">18</span> +<span class="normal">19</span> +<span class="normal">20</span> +<span class="normal">21</span> +<span class="normal">22</span> +<span class="normal">23</span> +<span class="normal">24</span> +<span class="normal">25</span> +<span class="normal">26</span> +<span class="normal">27</span> +<span class="normal">28</span> +<span class="normal">29</span> +<span class="normal">30</span> +<span class="normal">31</span> +<span class="normal">32</span> +<span class="normal">33</span> +<span class="normal">34</span> +<span class="normal">35</span> +<span class="normal">36</span> +<span class="normal">37</span> +<span class="normal">38</span> +<span class="normal">39</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * dropbox-client-util.h</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Header file for dropbox-client-util.c</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifndef DROPBOX_CLIENT_UTIL_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#define DROPBOX_CLIENT_UTIL_H</span> +<a id="line-26" name="line-26"></a> +<a id="line-27" name="line-27"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="error2"><--- Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-28" name="line-28"></a> +<a id="line-29" name="line-29"></a><span class="n">G_BEGIN_DECLS</span> +<a id="line-30" name="line-30"></a> +<a id="line-31" name="line-31"></a><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">dropbox_client_util_sanitize</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">a</span><span class="p">);</span> +<a id="line-32" name="line-32"></a><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="nf">dropbox_client_util_desanitize</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">a</span><span class="p">);</span> +<a id="line-33" name="line-33"></a> +<a id="line-34" name="line-34"></a><span class="n">gboolean</span> +<a id="line-35" name="line-35"></a><span class="nf">dropbox_client_util_command_parse_arg</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">line</span><span class="p">,</span><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">return_table</span><span class="p">);</span> +<a id="line-36" name="line-36"></a> +<a id="line-37" name="line-37"></a><span class="n">G_END_DECLS</span> +<a id="line-38" name="line-38"></a> +<a id="line-39" name="line-39"></a><span class="cp">#endif</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/4.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/4.html new file mode 100644 index 0000000..674a040 --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/4.html @@ -0,0 +1,395 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/caja-dropbox-hooks.h</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> caja-dropbox-hooks.h</p> +<a href="4.html#line-27"> missingIncludeSystem 27</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal">10</span> +<span class="normal">11</span> +<span class="normal">12</span> +<span class="normal">13</span> +<span class="normal">14</span> +<span class="normal">15</span> +<span class="normal">16</span> +<span class="normal">17</span> +<span class="normal">18</span> +<span class="normal">19</span> +<span class="normal">20</span> +<span class="normal">21</span> +<span class="normal">22</span> +<span class="normal">23</span> +<span class="normal">24</span> +<span class="normal">25</span> +<span class="normal">26</span> +<span class="normal">27</span> +<span class="normal">28</span> +<span class="normal">29</span> +<span class="normal">30</span> +<span class="normal">31</span> +<span class="normal">32</span> +<span class="normal">33</span> +<span class="normal">34</span> +<span class="normal">35</span> +<span class="normal">36</span> +<span class="normal">37</span> +<span class="normal">38</span> +<span class="normal">39</span> +<span class="normal">40</span> +<span class="normal">41</span> +<span class="normal">42</span> +<span class="normal">43</span> +<span class="normal">44</span> +<span class="normal">45</span> +<span class="normal">46</span> +<span class="normal">47</span> +<span class="normal">48</span> +<span class="normal">49</span> +<span class="normal">50</span> +<span class="normal">51</span> +<span class="normal">52</span> +<span class="normal">53</span> +<span class="normal">54</span> +<span class="normal">55</span> +<span class="normal">56</span> +<span class="normal">57</span> +<span class="normal">58</span> +<span class="normal">59</span> +<span class="normal">60</span> +<span class="normal">61</span> +<span class="normal">62</span> +<span class="normal">63</span> +<span class="normal">64</span> +<span class="normal">65</span> +<span class="normal">66</span> +<span class="normal">67</span> +<span class="normal">68</span> +<span class="normal">69</span> +<span class="normal">70</span> +<span class="normal">71</span> +<span class="normal">72</span> +<span class="normal">73</span> +<span class="normal">74</span> +<span class="normal">75</span> +<span class="normal">76</span> +<span class="normal">77</span> +<span class="normal">78</span> +<span class="normal">79</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * caja-dropbox-hooks.h</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Header file for caja-dropbox-hooks.c</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifndef CAJA_DROPBOX_HOOKS_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#define CAJA_DROPBOX_HOOKS_H</span> +<a id="line-26" name="line-26"></a> +<a id="line-27" name="line-27"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="error2"><--- Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-28" name="line-28"></a> +<a id="line-29" name="line-29"></a><span class="n">G_BEGIN_DECLS</span> +<a id="line-30" name="line-30"></a> +<a id="line-31" name="line-31"></a><span class="k">typedef</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">DropboxUpdateHook</span><span class="p">)(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="p">);</span> +<a id="line-32" name="line-32"></a><span class="k">typedef</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">DropboxHookClientConnectHook</span><span class="p">)(</span><span class="n">gpointer</span><span class="p">);</span> +<a id="line-33" name="line-33"></a> +<a id="line-34" name="line-34"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-35" name="line-35"></a><span class="w"> </span><span class="n">GIOChannel</span><span class="w"> </span><span class="o">*</span><span class="n">chan</span><span class="p">;</span> +<a id="line-36" name="line-36"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">socket</span><span class="p">;</span> +<a id="line-37" name="line-37"></a><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-38" name="line-38"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">line</span><span class="p">;</span> +<a id="line-39" name="line-39"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">command_name</span><span class="p">;</span> +<a id="line-40" name="line-40"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">command_args</span><span class="p">;</span> +<a id="line-41" name="line-41"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">numargs</span><span class="p">;</span> +<a id="line-42" name="line-42"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="n">hhsi</span><span class="p">;</span> +<a id="line-43" name="line-43"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">connected</span><span class="p">;</span> +<a id="line-44" name="line-44"></a><span class="w"> </span><span class="n">guint</span><span class="w"> </span><span class="n">event_source</span><span class="p">;</span> +<a id="line-45" name="line-45"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">dispatch_table</span><span class="p">;</span> +<a id="line-46" name="line-46"></a><span class="w"> </span><span class="n">GHookList</span><span class="w"> </span><span class="n">ondisconnect_hooklist</span><span class="p">;</span> +<a id="line-47" name="line-47"></a><span class="w"> </span><span class="n">GHookList</span><span class="w"> </span><span class="n">onconnect_hooklist</span><span class="p">;</span> +<a id="line-48" name="line-48"></a><span class="p">}</span><span class="w"> </span><span class="n">CajaDropboxHookserv</span><span class="p">;</span> +<a id="line-49" name="line-49"></a> +<a id="line-50" name="line-50"></a><span class="kt">void</span> +<a id="line-51" name="line-51"></a><span class="nf">caja_dropbox_hooks_setup</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="p">);</span> +<a id="line-52" name="line-52"></a> +<a id="line-53" name="line-53"></a><span class="kt">void</span> +<a id="line-54" name="line-54"></a><span class="nf">caja_dropbox_hooks_start</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="p">);</span> +<a id="line-55" name="line-55"></a> +<a id="line-56" name="line-56"></a><span class="n">gboolean</span> +<a id="line-57" name="line-57"></a><span class="nf">caja_dropbox_hooks_is_connected</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="p">);</span> +<a id="line-58" name="line-58"></a> +<a id="line-59" name="line-59"></a><span class="n">gboolean</span> +<a id="line-60" name="line-60"></a><span class="nf">caja_dropbox_hooks_force_reconnect</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="p">);</span> +<a id="line-61" name="line-61"></a> +<a id="line-62" name="line-62"></a><span class="kt">void</span> +<a id="line-63" name="line-63"></a><span class="nf">caja_dropbox_hooks_add</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">ndhs</span><span class="p">,</span> +<a id="line-64" name="line-64"></a><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">hook_name</span><span class="p">,</span> +<a id="line-65" name="line-65"></a><span class="w"> </span><span class="n">DropboxUpdateHook</span><span class="w"> </span><span class="n">hook</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">);</span> +<a id="line-66" name="line-66"></a><span class="kt">void</span> +<a id="line-67" name="line-67"></a><span class="nf">caja_dropbox_hooks_add_on_disconnect_hook</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">,</span> +<a id="line-68" name="line-68"></a><span class="w"> </span><span class="n">DropboxHookClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-69" name="line-69"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">);</span> +<a id="line-70" name="line-70"></a> +<a id="line-71" name="line-71"></a><span class="kt">void</span> +<a id="line-72" name="line-72"></a><span class="nf">caja_dropbox_hooks_add_on_connect_hook</span><span class="p">(</span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="o">*</span><span class="n">hookserv</span><span class="p">,</span> +<a id="line-73" name="line-73"></a><span class="w"> </span><span class="n">DropboxHookClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-74" name="line-74"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">);</span> +<a id="line-75" name="line-75"></a> +<a id="line-76" name="line-76"></a> +<a id="line-77" name="line-77"></a><span class="n">G_END_DECLS</span> +<a id="line-78" name="line-78"></a> +<a id="line-79" name="line-79"></a><span class="cp">#endif</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/5.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/5.html new file mode 100644 index 0000000..4c8f51f --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/5.html @@ -0,0 +1,2233 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/caja-dropbox.c</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> caja-dropbox.c</p> +<a href="5.html#line-25"> missingIncludeSystem 25</a><a href="5.html#line-28"> missingIncludeSystem 28</a><a href="5.html#line-29"> missingIncludeSystem 29</a><a href="5.html#line-30"> missingIncludeSystem 30</a><a href="5.html#line-31"> missingIncludeSystem 31</a><a href="5.html#line-32"> missingIncludeSystem 32</a><a href="5.html#line-33"> missingIncludeSystem 33</a><a href="5.html#line-35"> missingIncludeSystem 35</a><a href="5.html#line-36"> missingIncludeSystem 36</a><a href="5.html#line-37"> missingIncludeSystem 37</a><a href="5.html#line-38"> missingIncludeSystem 38</a><a href="5.html#line-40"> missingIncludeSystem 40</a><a href="5.html#line-41"> missingIncludeSystem 41</a><a href="5.html#line-42"> missingIncludeSystem 42</a><a href="5.html#line-312"> variableScope 312</a><a href="5.html#line-508"> constVariablePointer 508</a><a href="5.html#line-752"> variableScope 752</a><a href="5.html#line-756"> knownConditionTrueFalse 756</a><a href="5.html#line-847"> varFuncNullUB 847</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span> +<span class="normal">114</span> +<span class="normal">115</span> +<span class="normal">116</span> +<span class="normal">117</span> +<span class="normal">118</span> +<span class="normal">119</span> +<span class="normal">120</span> +<span class="normal">121</span> +<span class="normal">122</span> +<span class="normal">123</span> +<span class="normal">124</span> +<span class="normal">125</span> +<span class="normal">126</span> +<span class="normal">127</span> +<span class="normal">128</span> +<span class="normal">129</span> +<span class="normal">130</span> +<span class="normal">131</span> +<span class="normal">132</span> +<span class="normal">133</span> +<span class="normal">134</span> +<span class="normal">135</span> +<span class="normal">136</span> +<span class="normal">137</span> +<span class="normal">138</span> +<span class="normal">139</span> +<span class="normal">140</span> +<span class="normal">141</span> +<span class="normal">142</span> +<span class="normal">143</span> +<span class="normal">144</span> +<span class="normal">145</span> +<span class="normal">146</span> +<span class="normal">147</span> +<span class="normal">148</span> +<span class="normal">149</span> +<span class="normal">150</span> +<span class="normal">151</span> +<span class="normal">152</span> +<span class="normal">153</span> +<span class="normal">154</span> +<span class="normal">155</span> +<span class="normal">156</span> +<span class="normal">157</span> +<span class="normal">158</span> +<span class="normal">159</span> +<span class="normal">160</span> +<span class="normal">161</span> +<span class="normal">162</span> +<span class="normal">163</span> +<span class="normal">164</span> +<span class="normal">165</span> +<span class="normal">166</span> +<span class="normal">167</span> +<span class="normal">168</span> +<span class="normal">169</span> +<span class="normal">170</span> +<span class="normal">171</span> +<span class="normal">172</span> +<span class="normal">173</span> +<span class="normal">174</span> +<span class="normal">175</span> +<span class="normal">176</span> +<span class="normal">177</span> +<span class="normal">178</span> +<span class="normal">179</span> +<span class="normal">180</span> +<span class="normal">181</span> +<span class="normal">182</span> +<span class="normal">183</span> +<span class="normal">184</span> +<span class="normal">185</span> +<span class="normal">186</span> +<span class="normal">187</span> +<span class="normal">188</span> +<span class="normal">189</span> +<span class="normal">190</span> +<span class="normal">191</span> +<span class="normal">192</span> +<span class="normal">193</span> +<span class="normal">194</span> +<span class="normal">195</span> +<span class="normal">196</span> +<span class="normal">197</span> +<span class="normal">198</span> +<span class="normal">199</span> +<span class="normal">200</span> +<span class="normal">201</span> +<span class="normal">202</span> +<span class="normal">203</span> +<span class="normal">204</span> +<span class="normal">205</span> +<span class="normal">206</span> +<span class="normal">207</span> +<span class="normal">208</span> +<span class="normal">209</span> +<span class="normal">210</span> +<span class="normal">211</span> +<span class="normal">212</span> +<span class="normal">213</span> +<span class="normal">214</span> +<span class="normal">215</span> +<span class="normal">216</span> +<span class="normal">217</span> +<span class="normal">218</span> +<span class="normal">219</span> +<span class="normal">220</span> +<span class="normal">221</span> +<span class="normal">222</span> +<span class="normal">223</span> +<span class="normal">224</span> +<span class="normal">225</span> +<span class="normal">226</span> +<span class="normal">227</span> +<span class="normal">228</span> +<span class="normal">229</span> +<span class="normal">230</span> +<span class="normal">231</span> +<span class="normal">232</span> +<span class="normal">233</span> +<span class="normal">234</span> +<span class="normal">235</span> +<span class="normal">236</span> +<span class="normal">237</span> +<span class="normal">238</span> +<span class="normal">239</span> +<span class="normal">240</span> +<span class="normal">241</span> +<span class="normal">242</span> +<span class="normal">243</span> +<span class="normal">244</span> +<span class="normal">245</span> +<span class="normal">246</span> +<span class="normal">247</span> +<span class="normal">248</span> +<span class="normal">249</span> +<span class="normal">250</span> +<span class="normal">251</span> +<span class="normal">252</span> +<span class="normal">253</span> +<span class="normal">254</span> +<span class="normal">255</span> +<span class="normal">256</span> +<span class="normal">257</span> +<span class="normal">258</span> +<span class="normal">259</span> +<span class="normal">260</span> +<span class="normal">261</span> +<span class="normal">262</span> +<span class="normal">263</span> +<span class="normal">264</span> +<span class="normal">265</span> +<span class="normal">266</span> +<span class="normal">267</span> +<span class="normal">268</span> +<span class="normal">269</span> +<span class="normal">270</span> +<span class="normal">271</span> +<span class="normal">272</span> +<span class="normal">273</span> +<span class="normal">274</span> +<span class="normal">275</span> +<span class="normal">276</span> +<span class="normal">277</span> +<span class="normal">278</span> +<span class="normal">279</span> +<span class="normal">280</span> +<span class="normal">281</span> +<span class="normal">282</span> +<span class="normal">283</span> +<span class="normal">284</span> +<span class="normal">285</span> +<span class="normal">286</span> +<span class="normal">287</span> +<span class="normal">288</span> +<span class="normal">289</span> +<span class="normal">290</span> +<span class="normal">291</span> +<span class="normal">292</span> +<span class="normal">293</span> +<span class="normal">294</span> +<span class="normal">295</span> +<span class="normal">296</span> +<span class="normal">297</span> +<span class="normal">298</span> +<span class="normal">299</span> +<span class="normal">300</span> +<span class="normal">301</span> +<span class="normal">302</span> +<span class="normal">303</span> +<span class="normal">304</span> +<span class="normal">305</span> +<span class="normal">306</span> +<span class="normal">307</span> +<span class="normal">308</span> +<span class="normal">309</span> +<span class="normal">310</span> +<span class="normal">311</span> +<span class="normal">312</span> +<span class="normal">313</span> +<span class="normal">314</span> +<span class="normal">315</span> +<span class="normal">316</span> +<span class="normal">317</span> +<span class="normal">318</span> +<span class="normal">319</span> +<span class="normal">320</span> +<span class="normal">321</span> +<span class="normal">322</span> +<span class="normal">323</span> +<span class="normal">324</span> +<span class="normal">325</span> +<span class="normal">326</span> +<span class="normal">327</span> +<span class="normal">328</span> +<span class="normal">329</span> +<span class="normal">330</span> +<span class="normal">331</span> +<span class="normal">332</span> +<span class="normal">333</span> +<span class="normal">334</span> +<span class="normal">335</span> +<span class="normal">336</span> +<span class="normal">337</span> +<span class="normal">338</span> +<span class="normal">339</span> +<span class="normal">340</span> +<span class="normal">341</span> +<span class="normal">342</span> +<span class="normal">343</span> +<span class="normal">344</span> +<span class="normal">345</span> +<span class="normal">346</span> +<span class="normal">347</span> +<span class="normal">348</span> +<span class="normal">349</span> +<span class="normal">350</span> +<span class="normal">351</span> +<span class="normal">352</span> +<span class="normal">353</span> +<span class="normal">354</span> +<span class="normal">355</span> +<span class="normal">356</span> +<span class="normal">357</span> +<span class="normal">358</span> +<span class="normal">359</span> +<span class="normal">360</span> +<span class="normal">361</span> +<span class="normal">362</span> +<span class="normal">363</span> +<span class="normal">364</span> +<span class="normal">365</span> +<span class="normal">366</span> +<span class="normal">367</span> +<span class="normal">368</span> +<span class="normal">369</span> +<span class="normal">370</span> +<span class="normal">371</span> +<span class="normal">372</span> +<span class="normal">373</span> +<span class="normal">374</span> +<span class="normal">375</span> +<span class="normal">376</span> +<span class="normal">377</span> +<span class="normal">378</span> +<span class="normal">379</span> +<span class="normal">380</span> +<span class="normal">381</span> +<span class="normal">382</span> +<span class="normal">383</span> +<span class="normal">384</span> +<span class="normal">385</span> +<span class="normal">386</span> +<span class="normal">387</span> +<span class="normal">388</span> +<span class="normal">389</span> +<span class="normal">390</span> +<span class="normal">391</span> +<span class="normal">392</span> +<span class="normal">393</span> +<span class="normal">394</span> +<span class="normal">395</span> +<span class="normal">396</span> +<span class="normal">397</span> +<span class="normal">398</span> +<span class="normal">399</span> +<span class="normal">400</span> +<span class="normal">401</span> +<span class="normal">402</span> +<span class="normal">403</span> +<span class="normal">404</span> +<span class="normal">405</span> +<span class="normal">406</span> +<span class="normal">407</span> +<span class="normal">408</span> +<span class="normal">409</span> +<span class="normal">410</span> +<span class="normal">411</span> +<span class="normal">412</span> +<span class="normal">413</span> +<span class="normal">414</span> +<span class="normal">415</span> +<span class="normal">416</span> +<span class="normal">417</span> +<span class="normal">418</span> +<span class="normal">419</span> +<span class="normal">420</span> +<span class="normal">421</span> +<span class="normal">422</span> +<span class="normal">423</span> +<span class="normal">424</span> +<span class="normal">425</span> +<span class="normal">426</span> +<span class="normal">427</span> +<span class="normal">428</span> +<span class="normal">429</span> +<span class="normal">430</span> +<span class="normal">431</span> +<span class="normal">432</span> +<span class="normal">433</span> +<span class="normal">434</span> +<span class="normal">435</span> +<span class="normal">436</span> +<span class="normal">437</span> +<span class="normal">438</span> +<span class="normal">439</span> +<span class="normal">440</span> +<span class="normal">441</span> +<span class="normal">442</span> +<span class="normal">443</span> +<span class="normal">444</span> +<span class="normal">445</span> +<span class="normal">446</span> +<span class="normal">447</span> +<span class="normal">448</span> +<span class="normal">449</span> +<span class="normal">450</span> +<span class="normal">451</span> +<span class="normal">452</span> +<span class="normal">453</span> +<span class="normal">454</span> +<span class="normal">455</span> +<span class="normal">456</span> +<span class="normal">457</span> +<span class="normal">458</span> +<span class="normal">459</span> +<span class="normal">460</span> +<span class="normal">461</span> +<span class="normal">462</span> +<span class="normal">463</span> +<span class="normal">464</span> +<span class="normal">465</span> +<span class="normal">466</span> +<span class="normal">467</span> +<span class="normal">468</span> +<span class="normal">469</span> +<span class="normal">470</span> +<span class="normal">471</span> +<span class="normal">472</span> +<span class="normal">473</span> +<span class="normal">474</span> +<span class="normal">475</span> +<span class="normal">476</span> +<span class="normal">477</span> +<span class="normal">478</span> +<span class="normal">479</span> +<span class="normal">480</span> +<span class="normal">481</span> +<span class="normal">482</span> +<span class="normal">483</span> +<span class="normal">484</span> +<span class="normal">485</span> +<span class="normal">486</span> +<span class="normal">487</span> +<span class="normal">488</span> +<span class="normal">489</span> +<span class="normal">490</span> +<span class="normal">491</span> +<span class="normal">492</span> +<span class="normal">493</span> +<span class="normal">494</span> +<span class="normal">495</span> +<span class="normal">496</span> +<span class="normal">497</span> +<span class="normal">498</span> +<span class="normal">499</span> +<span class="normal">500</span> +<span class="normal">501</span> +<span class="normal">502</span> +<span class="normal">503</span> +<span class="normal">504</span> +<span class="normal">505</span> +<span class="normal">506</span> +<span class="normal">507</span> +<span class="normal">508</span> +<span class="normal">509</span> +<span class="normal">510</span> +<span class="normal">511</span> +<span class="normal">512</span> +<span class="normal">513</span> +<span class="normal">514</span> +<span class="normal">515</span> +<span class="normal">516</span> +<span class="normal">517</span> +<span class="normal">518</span> +<span class="normal">519</span> +<span class="normal">520</span> +<span class="normal">521</span> +<span class="normal">522</span> +<span class="normal">523</span> +<span class="normal">524</span> +<span class="normal">525</span> +<span class="normal">526</span> +<span class="normal">527</span> +<span class="normal">528</span> +<span class="normal">529</span> +<span class="normal">530</span> +<span class="normal">531</span> +<span class="normal">532</span> +<span class="normal">533</span> +<span class="normal">534</span> +<span class="normal">535</span> +<span class="normal">536</span> +<span class="normal">537</span> +<span class="normal">538</span> +<span class="normal">539</span> +<span class="normal">540</span> +<span class="normal">541</span> +<span class="normal">542</span> +<span class="normal">543</span> +<span class="normal">544</span> +<span class="normal">545</span> +<span class="normal">546</span> +<span class="normal">547</span> +<span class="normal">548</span> +<span class="normal">549</span> +<span class="normal">550</span> +<span class="normal">551</span> +<span class="normal">552</span> +<span class="normal">553</span> +<span class="normal">554</span> +<span class="normal">555</span> +<span class="normal">556</span> +<span class="normal">557</span> +<span class="normal">558</span> +<span class="normal">559</span> +<span class="normal">560</span> +<span class="normal">561</span> +<span class="normal">562</span> +<span class="normal">563</span> +<span class="normal">564</span> +<span class="normal">565</span> +<span class="normal">566</span> +<span class="normal">567</span> +<span class="normal">568</span> +<span class="normal">569</span> +<span class="normal">570</span> +<span class="normal">571</span> +<span class="normal">572</span> +<span class="normal">573</span> +<span class="normal">574</span> +<span class="normal">575</span> +<span class="normal">576</span> +<span class="normal">577</span> +<span class="normal">578</span> +<span class="normal">579</span> +<span class="normal">580</span> +<span class="normal">581</span> +<span class="normal">582</span> +<span class="normal">583</span> +<span class="normal">584</span> +<span class="normal">585</span> +<span class="normal">586</span> +<span class="normal">587</span> +<span class="normal">588</span> +<span class="normal">589</span> +<span class="normal">590</span> +<span class="normal">591</span> +<span class="normal">592</span> +<span class="normal">593</span> +<span class="normal">594</span> +<span class="normal">595</span> +<span class="normal">596</span> +<span class="normal">597</span> +<span class="normal">598</span> +<span class="normal">599</span> +<span class="normal">600</span> +<span class="normal">601</span> +<span class="normal">602</span> +<span class="normal">603</span> +<span class="normal">604</span> +<span class="normal">605</span> +<span class="normal">606</span> +<span class="normal">607</span> +<span class="normal">608</span> +<span class="normal">609</span> +<span class="normal">610</span> +<span class="normal">611</span> +<span class="normal">612</span> +<span class="normal">613</span> +<span class="normal">614</span> +<span class="normal">615</span> +<span class="normal">616</span> +<span class="normal">617</span> +<span class="normal">618</span> +<span class="normal">619</span> +<span class="normal">620</span> +<span class="normal">621</span> +<span class="normal">622</span> +<span class="normal">623</span> +<span class="normal">624</span> +<span class="normal">625</span> +<span class="normal">626</span> +<span class="normal">627</span> +<span class="normal">628</span> +<span class="normal">629</span> +<span class="normal">630</span> +<span class="normal">631</span> +<span class="normal">632</span> +<span class="normal">633</span> +<span class="normal">634</span> +<span class="normal">635</span> +<span class="normal">636</span> +<span class="normal">637</span> +<span class="normal">638</span> +<span class="normal">639</span> +<span class="normal">640</span> +<span class="normal">641</span> +<span class="normal">642</span> +<span class="normal">643</span> +<span class="normal">644</span> +<span class="normal">645</span> +<span class="normal">646</span> +<span class="normal">647</span> +<span class="normal">648</span> +<span class="normal">649</span> +<span class="normal">650</span> +<span class="normal">651</span> +<span class="normal">652</span> +<span class="normal">653</span> +<span class="normal">654</span> +<span class="normal">655</span> +<span class="normal">656</span> +<span class="normal">657</span> +<span class="normal">658</span> +<span class="normal">659</span> +<span class="normal">660</span> +<span class="normal">661</span> +<span class="normal">662</span> +<span class="normal">663</span> +<span class="normal">664</span> +<span class="normal">665</span> +<span class="normal">666</span> +<span class="normal">667</span> +<span class="normal">668</span> +<span class="normal">669</span> +<span class="normal">670</span> +<span class="normal">671</span> +<span class="normal">672</span> +<span class="normal">673</span> +<span class="normal">674</span> +<span class="normal">675</span> +<span class="normal">676</span> +<span class="normal">677</span> +<span class="normal">678</span> +<span class="normal">679</span> +<span class="normal">680</span> +<span class="normal">681</span> +<span class="normal">682</span> +<span class="normal">683</span> +<span class="normal">684</span> +<span class="normal">685</span> +<span class="normal">686</span> +<span class="normal">687</span> +<span class="normal">688</span> +<span class="normal">689</span> +<span class="normal">690</span> +<span class="normal">691</span> +<span class="normal">692</span> +<span class="normal">693</span> +<span class="normal">694</span> +<span class="normal">695</span> +<span class="normal">696</span> +<span class="normal">697</span> +<span class="normal">698</span> +<span class="normal">699</span> +<span class="normal">700</span> +<span class="normal">701</span> +<span class="normal">702</span> +<span class="normal">703</span> +<span class="normal">704</span> +<span class="normal">705</span> +<span class="normal">706</span> +<span class="normal">707</span> +<span class="normal">708</span> +<span class="normal">709</span> +<span class="normal">710</span> +<span class="normal">711</span> +<span class="normal">712</span> +<span class="normal">713</span> +<span class="normal">714</span> +<span class="normal">715</span> +<span class="normal">716</span> +<span class="normal">717</span> +<span class="normal">718</span> +<span class="normal">719</span> +<span class="normal">720</span> +<span class="normal">721</span> +<span class="normal">722</span> +<span class="normal">723</span> +<span class="normal">724</span> +<span class="normal">725</span> +<span class="normal">726</span> +<span class="normal">727</span> +<span class="normal">728</span> +<span class="normal">729</span> +<span class="normal">730</span> +<span class="normal">731</span> +<span class="normal">732</span> +<span class="normal">733</span> +<span class="normal">734</span> +<span class="normal">735</span> +<span class="normal">736</span> +<span class="normal">737</span> +<span class="normal">738</span> +<span class="normal">739</span> +<span class="normal">740</span> +<span class="normal">741</span> +<span class="normal">742</span> +<span class="normal">743</span> +<span class="normal">744</span> +<span class="normal">745</span> +<span class="normal">746</span> +<span class="normal">747</span> +<span class="normal">748</span> +<span class="normal">749</span> +<span class="normal">750</span> +<span class="normal">751</span> +<span class="normal">752</span> +<span class="normal">753</span> +<span class="normal">754</span> +<span class="normal">755</span> +<span class="normal">756</span> +<span class="normal">757</span> +<span class="normal">758</span> +<span class="normal">759</span> +<span class="normal">760</span> +<span class="normal">761</span> +<span class="normal">762</span> +<span class="normal">763</span> +<span class="normal">764</span> +<span class="normal">765</span> +<span class="normal">766</span> +<span class="normal">767</span> +<span class="normal">768</span> +<span class="normal">769</span> +<span class="normal">770</span> +<span class="normal">771</span> +<span class="normal">772</span> +<span class="normal">773</span> +<span class="normal">774</span> +<span class="normal">775</span> +<span class="normal">776</span> +<span class="normal">777</span> +<span class="normal">778</span> +<span class="normal">779</span> +<span class="normal">780</span> +<span class="normal">781</span> +<span class="normal">782</span> +<span class="normal">783</span> +<span class="normal">784</span> +<span class="normal">785</span> +<span class="normal">786</span> +<span class="normal">787</span> +<span class="normal">788</span> +<span class="normal">789</span> +<span class="normal">790</span> +<span class="normal">791</span> +<span class="normal">792</span> +<span class="normal">793</span> +<span class="normal">794</span> +<span class="normal">795</span> +<span class="normal">796</span> +<span class="normal">797</span> +<span class="normal">798</span> +<span class="normal">799</span> +<span class="normal">800</span> +<span class="normal">801</span> +<span class="normal">802</span> +<span class="normal">803</span> +<span class="normal">804</span> +<span class="normal">805</span> +<span class="normal">806</span> +<span class="normal">807</span> +<span class="normal">808</span> +<span class="normal">809</span> +<span class="normal">810</span> +<span class="normal">811</span> +<span class="normal">812</span> +<span class="normal">813</span> +<span class="normal">814</span> +<span class="normal">815</span> +<span class="normal">816</span> +<span class="normal">817</span> +<span class="normal">818</span> +<span class="normal">819</span> +<span class="normal">820</span> +<span class="normal">821</span> +<span class="normal">822</span> +<span class="normal">823</span> +<span class="normal">824</span> +<span class="normal">825</span> +<span class="normal">826</span> +<span class="normal">827</span> +<span class="normal">828</span> +<span class="normal">829</span> +<span class="normal">830</span> +<span class="normal">831</span> +<span class="normal">832</span> +<span class="normal">833</span> +<span class="normal">834</span> +<span class="normal">835</span> +<span class="normal">836</span> +<span class="normal">837</span> +<span class="normal">838</span> +<span class="normal">839</span> +<span class="normal">840</span> +<span class="normal">841</span> +<span class="normal">842</span> +<span class="normal">843</span> +<span class="normal">844</span> +<span class="normal">845</span> +<span class="normal">846</span> +<span class="normal">847</span> +<span class="normal">848</span> +<span class="normal">849</span> +<span class="normal">850</span> +<span class="normal">851</span> +<span class="normal">852</span> +<span class="normal">853</span> +<span class="normal">854</span> +<span class="normal">855</span> +<span class="normal">856</span> +<span class="normal">857</span> +<span class="normal">858</span> +<span class="normal">859</span> +<span class="normal">860</span> +<span class="normal">861</span> +<span class="normal">862</span> +<span class="normal">863</span> +<span class="normal">864</span> +<span class="normal">865</span> +<span class="normal">866</span> +<span class="normal">867</span> +<span class="normal">868</span> +<span class="normal">869</span> +<span class="normal">870</span> +<span class="normal">871</span> +<span class="normal">872</span> +<span class="normal">873</span> +<span class="normal">874</span> +<span class="normal">875</span> +<span class="normal">876</span> +<span class="normal">877</span> +<span class="normal">878</span> +<span class="normal">879</span> +<span class="normal">880</span> +<span class="normal">881</span> +<span class="normal">882</span> +<span class="normal">883</span> +<span class="normal">884</span> +<span class="normal">885</span> +<span class="normal">886</span> +<span class="normal">887</span> +<span class="normal">888</span> +<span class="normal">889</span> +<span class="normal">890</span> +<span class="normal">891</span> +<span class="normal">892</span> +<span class="normal">893</span> +<span class="normal">894</span> +<span class="normal">895</span> +<span class="normal">896</span> +<span class="normal">897</span> +<span class="normal">898</span> +<span class="normal">899</span> +<span class="normal">900</span> +<span class="normal">901</span> +<span class="normal">902</span> +<span class="normal">903</span> +<span class="normal">904</span> +<span class="normal">905</span> +<span class="normal">906</span> +<span class="normal">907</span> +<span class="normal">908</span> +<span class="normal">909</span> +<span class="normal">910</span> +<span class="normal">911</span> +<span class="normal">912</span> +<span class="normal">913</span> +<span class="normal">914</span> +<span class="normal">915</span> +<span class="normal">916</span> +<span class="normal">917</span> +<span class="normal">918</span> +<span class="normal">919</span> +<span class="normal">920</span> +<span class="normal">921</span> +<span class="normal">922</span> +<span class="normal">923</span> +<span class="normal">924</span> +<span class="normal">925</span> +<span class="normal">926</span> +<span class="normal">927</span> +<span class="normal">928</span> +<span class="normal">929</span> +<span class="normal">930</span> +<span class="normal">931</span> +<span class="normal">932</span> +<span class="normal">933</span> +<span class="normal">934</span> +<span class="normal">935</span> +<span class="normal">936</span> +<span class="normal">937</span> +<span class="normal">938</span> +<span class="normal">939</span> +<span class="normal">940</span> +<span class="normal">941</span> +<span class="normal">942</span> +<span class="normal">943</span> +<span class="normal">944</span> +<span class="normal">945</span> +<span class="normal">946</span> +<span class="normal">947</span> +<span class="normal">948</span> +<span class="normal">949</span> +<span class="normal">950</span> +<span class="normal">951</span> +<span class="normal">952</span> +<span class="normal">953</span> +<span class="normal">954</span> +<span class="normal">955</span> +<span class="normal">956</span> +<span class="normal">957</span> +<span class="normal">958</span> +<span class="normal">959</span> +<span class="normal">960</span> +<span class="normal">961</span> +<span class="normal">962</span> +<span class="normal">963</span> +<span class="normal">964</span> +<span class="normal">965</span> +<span class="normal">966</span> +<span class="normal">967</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * caja-dropbox.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Implements the Caja extension API for Dropbox.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a id="line-25" name="line-25"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><config.h></span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="error2"><--- Include file: <config.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-26" name="line-26"></a><span class="cp">#endif</span> +<a id="line-27" name="line-27"></a> +<a id="line-28" name="line-28"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span><span class="error2"><--- Include file: <sys/types.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-29" name="line-29"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/socket.h></span><span class="error2"><--- Include file: <sys/socket.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-30" name="line-30"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/un.h></span><span class="error2"><--- Include file: <sys/un.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-31" name="line-31"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><errno.h></span><span class="error2"><--- Include file: <errno.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-32" name="line-32"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><unistd.h></span><span class="error2"><--- Include file: <unistd.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-33" name="line-33"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><ctype.h></span><span class="error2"><--- Include file: <ctype.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-34" name="line-34"></a> +<a id="line-35" name="line-35"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="error2"><--- Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-36" name="line-36"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib/gprintf.h></span><span class="error2"><--- Include file: <glib/gprintf.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-37" name="line-37"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib-object.h></span><span class="error2"><--- Include file: <glib-object.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-38" name="line-38"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><gtk/gtk.h></span><span class="error2"><--- Include file: <gtk/gtk.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-39" name="line-39"></a> +<a id="line-40" name="line-40"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-extension-types.h></span><span class="error2"><--- Include file: <libcaja-extension/caja-extension-types.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-41" name="line-41"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-menu-provider.h></span><span class="error2"><--- Include file: <libcaja-extension/caja-menu-provider.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-42" name="line-42"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="error2"><--- Include file: <libcaja-extension/caja-info-provider.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-43" name="line-43"></a> +<a id="line-44" name="line-44"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"g-util.h"</span> +<a id="line-45" name="line-45"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-command-client.h"</span> +<a id="line-46" name="line-46"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox.h"</span> +<a id="line-47" name="line-47"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span> +<a id="line-48" name="line-48"></a> +<a id="line-49" name="line-49"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">emblems</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="s">"dropbox-uptodate"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-syncing"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox-unsyncable"</span><span class="p">};</span> +<a id="line-50" name="line-50"></a><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">EMBLEMDIR</span><span class="w"> </span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">};</span> +<a id="line-51" name="line-51"></a> +<a id="line-52" name="line-52"></a><span class="n">gboolean</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span> +<a id="line-53" name="line-53"></a> +<a id="line-54" name="line-54"></a><span class="k">static</span><span class="w"> </span><span class="n">GType</span><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-55" name="line-55"></a> +<a id="line-56" name="line-56"></a><span class="cm">/*</span> +<a id="line-57" name="line-57"></a><span class="cm"> Simplifies a path by removing navigation elements such as '.' and '..'</span> +<a id="line-58" name="line-58"></a> +<a id="line-59" name="line-59"></a><span class="cm"> Arguments:</span> +<a id="line-60" name="line-60"></a><span class="cm"> - path: input path to be canonicalized</span> +<a id="line-61" name="line-61"></a> +<a id="line-62" name="line-62"></a><span class="cm"> Returns:</span> +<a id="line-63" name="line-63"></a><span class="cm"> Canonicalized path if input path is valid.</span> +<a id="line-64" name="line-64"></a><span class="cm"> NULL otherwise.</span> +<a id="line-65" name="line-65"></a><span class="cm">*/</span> +<a id="line-66" name="line-66"></a><span class="k">static</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span> +<a id="line-67" name="line-67"></a><span class="nf">canonicalize_path</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-68" name="line-68"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-69" name="line-69"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-70" name="line-70"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">cpy</span><span class="p">,</span><span class="w"> </span><span class="o">**</span><span class="n">elts</span><span class="p">;</span> +<a id="line-71" name="line-71"></a> +<a id="line-72" name="line-72"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-73" name="line-73"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">);</span> +<a id="line-74" name="line-74"></a> +<a id="line-75" name="line-75"></a><span class="w"> </span><span class="n">elts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="s">"/"</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span> +<a id="line-76" name="line-76"></a><span class="w"> </span><span class="n">cpy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">g_strv_length</span><span class="p">(</span><span class="n">elts</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span> +<a id="line-77" name="line-77"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"/"</span><span class="p">;</span> +<a id="line-78" name="line-78"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-79" name="line-79"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">".."</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-80" name="line-80"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-81" name="line-81"></a><span class="w"> </span><span class="n">j</span><span class="o">--</span><span class="p">;</span> +<a id="line-82" name="line-82"></a><span class="w"> </span><span class="p">}</span> +<a id="line-83" name="line-83"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-84" name="line-84"></a><span class="w"> </span><span class="c1">// Input path has too many parent directory references and is invalid</span> +<a id="line-85" name="line-85"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-86" name="line-86"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span> +<a id="line-87" name="line-87"></a><span class="w"> </span><span class="p">}</span> +<a id="line-88" name="line-88"></a><span class="w"> </span><span class="p">}</span> +<a id="line-89" name="line-89"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"."</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-90" name="line-90"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="o">++</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elts</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a id="line-91" name="line-91"></a><span class="w"> </span><span class="p">}</span> +<a id="line-92" name="line-92"></a><span class="w"> </span><span class="p">}</span> +<a id="line-93" name="line-93"></a> +<a id="line-94" name="line-94"></a><span class="w"> </span><span class="n">cpy</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-95" name="line-95"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_build_filenamev</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span> +<a id="line-96" name="line-96"></a> +<a id="line-97" name="line-97"></a><span class="nl">exit</span><span class="p">:</span> +<a id="line-98" name="line-98"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">cpy</span><span class="p">);</span> +<a id="line-99" name="line-99"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">elts</span><span class="p">);</span> +<a id="line-100" name="line-100"></a> +<a id="line-101" name="line-101"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span> +<a id="line-102" name="line-102"></a><span class="p">}</span> +<a id="line-103" name="line-103"></a> +<a id="line-104" name="line-104"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-105" name="line-105"></a><span class="nf">reset_file</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-106" name="line-106"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"resetting file %p"</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">file</span><span class="p">);</span> +<a id="line-107" name="line-107"></a><span class="w"> </span><span class="n">caja_file_info_invalidate_extension_info</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-108" name="line-108"></a><span class="p">}</span> +<a id="line-109" name="line-109"></a> +<a id="line-110" name="line-110"></a><span class="k">static</span><span class="w"> </span><span class="n">gboolean</span> +<a id="line-111" name="line-111"></a><span class="nf">reset_all_files</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-112" name="line-112"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a id="line-113" name="line-113"></a> +<a id="line-114" name="line-114"></a><span class="w"> </span><span class="cm">/* this works because you can call a function pointer with</span> +<a id="line-115" name="line-115"></a><span class="cm"> more arguments than it takes */</span> +<a id="line-116" name="line-116"></a><span class="w"> </span><span class="n">g_hash_table_foreach</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GHFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_file</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-117" name="line-117"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-118" name="line-118"></a><span class="p">}</span> +<a id="line-119" name="line-119"></a> +<a id="line-120" name="line-120"></a> +<a id="line-121" name="line-121"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-122" name="line-122"></a><span class="nf">when_file_dies</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">address</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-123" name="line-123"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a id="line-124" name="line-124"></a> +<a id="line-125" name="line-125"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span> +<a id="line-126" name="line-126"></a> +<a id="line-127" name="line-127"></a><span class="w"> </span><span class="cm">/* we never got a change to view this file */</span> +<a id="line-128" name="line-128"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-129" name="line-129"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-130" name="line-130"></a><span class="w"> </span><span class="p">}</span> +<a id="line-131" name="line-131"></a> +<a id="line-132" name="line-132"></a><span class="w"> </span><span class="cm">/* too chatty */</span> +<a id="line-133" name="line-133"></a><span class="w"> </span><span class="cm">/* debug("removing %s <-> 0x%p", filename, address); */</span> +<a id="line-134" name="line-134"></a> +<a id="line-135" name="line-135"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span> +<a id="line-136" name="line-136"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">address</span><span class="p">);</span> +<a id="line-137" name="line-137"></a><span class="p">}</span> +<a id="line-138" name="line-138"></a> +<a id="line-139" name="line-139"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-140" name="line-140"></a><span class="nf">changed_cb</span><span class="p">(</span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-141" name="line-141"></a><span class="w"> </span><span class="cm">/* check if this file's path has changed, if so update the hash and invalidate</span> +<a id="line-142" name="line-142"></a><span class="cm"> the file */</span> +<a id="line-143" name="line-143"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">;</span> +<a id="line-144" name="line-144"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename2</span><span class="p">;</span> +<a id="line-145" name="line-145"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a id="line-146" name="line-146"></a> +<a id="line-147" name="line-147"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-148" name="line-148"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-149" name="line-149"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-150" name="line-150"></a> +<a id="line-151" name="line-151"></a><span class="w"> </span><span class="cm">/* Canonicalization will only null-out a non-null filename if it is invalid */</span> +<a id="line-152" name="line-152"></a><span class="w"> </span><span class="n">g_assert</span><span class="p">((</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">));</span> +<a id="line-153" name="line-153"></a> +<a id="line-154" name="line-154"></a><span class="w"> </span><span class="n">filename2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span> +<a id="line-155" name="line-155"></a> +<a id="line-156" name="line-156"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a id="line-157" name="line-157"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a id="line-158" name="line-158"></a> +<a id="line-159" name="line-159"></a><span class="w"> </span><span class="cm">/* if filename2 is NULL we've never seen this file in update_file_info */</span> +<a id="line-160" name="line-160"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-161" name="line-161"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-162" name="line-162"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-163" name="line-163"></a><span class="w"> </span><span class="p">}</span> +<a id="line-164" name="line-164"></a> +<a id="line-165" name="line-165"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-166" name="line-166"></a><span class="w"> </span><span class="cm">/* A file has moved to offline storage. Lets remove it from our tables. */</span> +<a id="line-167" name="line-167"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-168" name="line-168"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span> +<a id="line-169" name="line-169"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span> +<a id="line-170" name="line-170"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-171" name="line-171"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-172" name="line-172"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-173" name="line-173"></a><span class="w"> </span><span class="p">}</span> +<a id="line-174" name="line-174"></a> +<a id="line-175" name="line-175"></a><span class="w"> </span><span class="cm">/* this is a hack, because caja doesn't do this for us, for some reason</span> +<a id="line-176" name="line-176"></a><span class="cm"> the file's path has changed */</span> +<a id="line-177" name="line-177"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-178" name="line-178"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shifty old: %s, new %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span> +<a id="line-179" name="line-179"></a> +<a id="line-180" name="line-180"></a><span class="w"> </span><span class="cm">/* gotta do this first, the call after this frees filename2 */</span> +<a id="line-181" name="line-181"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename2</span><span class="p">);</span> +<a id="line-182" name="line-182"></a> +<a id="line-183" name="line-183"></a><span class="w"> </span><span class="n">g_hash_table_replace</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span> +<a id="line-184" name="line-184"></a> +<a id="line-185" name="line-185"></a><span class="w"> </span><span class="p">{</span> +<a id="line-186" name="line-186"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span> +<a id="line-187" name="line-187"></a><span class="w"> </span><span class="cm">/* we shouldn't have another mapping from filename to an object */</span> +<a id="line-188" name="line-188"></a><span class="w"> </span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span> +<a id="line-189" name="line-189"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">f2</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-190" name="line-190"></a><span class="w"> </span><span class="cm">/* lets fix it if it's true, just remove the mapping */</span> +<a id="line-191" name="line-191"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span> +<a id="line-192" name="line-192"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span> +<a id="line-193" name="line-193"></a><span class="w"> </span><span class="p">}</span> +<a id="line-194" name="line-194"></a><span class="w"> </span><span class="p">}</span> +<a id="line-195" name="line-195"></a> +<a id="line-196" name="line-196"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span> +<a id="line-197" name="line-197"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-198" name="line-198"></a><span class="w"> </span><span class="p">}</span> +<a id="line-199" name="line-199"></a> +<a id="line-200" name="line-200"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-201" name="line-201"></a><span class="p">}</span> +<a id="line-202" name="line-202"></a> +<a id="line-203" name="line-203"></a><span class="k">static</span><span class="w"> </span><span class="n">CajaOperationResult</span> +<a id="line-204" name="line-204"></a><span class="nf">caja_dropbox_update_file_info</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a id="line-205" name="line-205"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">,</span> +<a id="line-206" name="line-206"></a><span class="w"> </span><span class="n">GClosure</span><span class="w"> </span><span class="o">*</span><span class="n">update_complete</span><span class="p">,</span> +<a id="line-207" name="line-207"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">**</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-208" name="line-208"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">;</span> +<a id="line-209" name="line-209"></a> +<a id="line-210" name="line-210"></a><span class="w"> </span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span> +<a id="line-211" name="line-211"></a> +<a id="line-212" name="line-212"></a><span class="w"> </span><span class="cm">/* this code adds this file object to our two-way hash of file objects</span> +<a id="line-213" name="line-213"></a><span class="cm"> so we can shell touch these files later */</span> +<a id="line-214" name="line-214"></a><span class="w"> </span><span class="p">{</span> +<a id="line-215" name="line-215"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">pfilename</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="p">;</span> +<a id="line-216" name="line-216"></a> +<a id="line-217" name="line-217"></a><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-218" name="line-218"></a><span class="w"> </span><span class="n">pfilename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-219" name="line-219"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a id="line-220" name="line-220"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pfilename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-221" name="line-221"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a id="line-222" name="line-222"></a><span class="w"> </span><span class="p">}</span> +<a id="line-223" name="line-223"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-224" name="line-224"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-225" name="line-225"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">stored_filename</span><span class="p">;</span> +<a id="line-226" name="line-226"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a id="line-227" name="line-227"></a> +<a id="line-228" name="line-228"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a id="line-229" name="line-229"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">pfilename</span><span class="p">);</span> +<a id="line-230" name="line-230"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-231" name="line-231"></a><span class="w"> </span><span class="cm">/* pfilename path was invalid if canonicalize operation nulled it out */</span> +<a id="line-232" name="line-232"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span> +<a id="line-233" name="line-233"></a><span class="w"> </span><span class="p">}</span> +<a id="line-234" name="line-234"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span> +<a id="line-235" name="line-235"></a> +<a id="line-236" name="line-236"></a><span class="w"> </span><span class="cm">/* don't worry about the dup checks, gcc is smart enough to optimize this</span> +<a id="line-237" name="line-237"></a><span class="cm"> GCSE ftw */</span> +<a id="line-238" name="line-238"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">cmp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">strcmp</span><span class="p">(</span><span class="n">stored_filename</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="o">||</span> +<a id="line-239" name="line-239"></a><span class="w"> </span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-240" name="line-240"></a> +<a id="line-241" name="line-241"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">cmp</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-242" name="line-242"></a><span class="w"> </span><span class="cm">/* this happens when the filename changes name on a file obj</span> +<a id="line-243" name="line-243"></a><span class="cm"> but changed_cb isn't called */</span> +<a id="line-244" name="line-244"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-245" name="line-245"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">);</span> +<a id="line-246" name="line-246"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">stored_filename</span><span class="p">);</span> +<a id="line-247" name="line-247"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-248" name="line-248"></a><span class="w"> </span><span class="p">}</span> +<a id="line-249" name="line-249"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stored_filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-250" name="line-250"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">f2</span><span class="p">;</span> +<a id="line-251" name="line-251"></a> +<a id="line-252" name="line-252"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">f2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-253" name="line-253"></a><span class="w"> </span><span class="cm">/* if the filename exists in the filename2obj hash</span> +<a id="line-254" name="line-254"></a><span class="cm"> but the file obj doesn't exist in the obj2filename hash:</span> +<a id="line-255" name="line-255"></a> +<a id="line-256" name="line-256"></a><span class="cm"> this happens when caja allocates another file object</span> +<a id="line-257" name="line-257"></a><span class="cm"> for a filename without first deleting the original file object</span> +<a id="line-258" name="line-258"></a> +<a id="line-259" name="line-259"></a><span class="cm"> just remove the association to the older file object, it's obsolete</span> +<a id="line-260" name="line-260"></a><span class="cm"> */</span> +<a id="line-261" name="line-261"></a><span class="w"> </span><span class="n">g_object_weak_unref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">f2</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-262" name="line-262"></a><span class="w"> </span><span class="n">g_signal_handlers_disconnect_by_func</span><span class="p">(</span><span class="n">f2</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-263" name="line-263"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span> +<a id="line-264" name="line-264"></a><span class="w"> </span><span class="n">g_hash_table_remove</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">f2</span><span class="p">);</span> +<a id="line-265" name="line-265"></a><span class="w"> </span><span class="p">}</span> +<a id="line-266" name="line-266"></a><span class="w"> </span><span class="p">}</span> +<a id="line-267" name="line-267"></a> +<a id="line-268" name="line-268"></a><span class="w"> </span><span class="cm">/* too chatty */</span> +<a id="line-269" name="line-269"></a><span class="w"> </span><span class="cm">/* debug("adding %s <-> 0x%p", filename, file);*/</span> +<a id="line-270" name="line-270"></a><span class="w"> </span><span class="n">g_object_weak_ref</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">file</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">GWeakNotify</span><span class="p">)</span><span class="w"> </span><span class="n">when_file_dies</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-271" name="line-271"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">),</span><span class="w"> </span><span class="n">file</span><span class="p">);</span> +<a id="line-272" name="line-272"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">filename</span><span class="p">));</span> +<a id="line-273" name="line-273"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"changed"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="p">(</span><span class="n">changed_cb</span><span class="p">),</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-274" name="line-274"></a><span class="w"> </span><span class="p">}</span> +<a id="line-275" name="line-275"></a> +<a id="line-276" name="line-276"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-277" name="line-277"></a><span class="w"> </span><span class="p">}</span> +<a id="line-278" name="line-278"></a><span class="w"> </span><span class="p">}</span> +<a id="line-279" name="line-279"></a> +<a id="line-280" name="line-280"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">))</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="w"> </span><span class="o">||</span> +<a id="line-281" name="line-281"></a><span class="w"> </span><span class="n">caja_file_info_is_gone</span><span class="p">(</span><span class="n">file</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> +<a id="line-282" name="line-282"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a id="line-283" name="line-283"></a><span class="w"> </span><span class="p">}</span> +<a id="line-284" name="line-284"></a> +<a id="line-285" name="line-285"></a><span class="w"> </span><span class="p">{</span> +<a id="line-286" name="line-286"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-287" name="line-287"></a> +<a id="line-288" name="line-288"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-289" name="line-289"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">provider</span><span class="p">;</span> +<a id="line-290" name="line-290"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GET_FILE_INFO</span><span class="p">;</span> +<a id="line-291" name="line-291"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_closure_ref</span><span class="p">(</span><span class="n">update_complete</span><span class="p">);</span> +<a id="line-292" name="line-292"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_ref</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-293" name="line-293"></a> +<a id="line-294" name="line-294"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">);</span> +<a id="line-295" name="line-295"></a> +<a id="line-296" name="line-296"></a><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dfic</span><span class="p">;</span> +<a id="line-297" name="line-297"></a> +<a id="line-298" name="line-298"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span> +<a id="line-299" name="line-299"></a><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span> +<a id="line-300" name="line-300"></a><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">CAJA_OPERATION_IN_PROGRESS</span><span class="p">;</span> +<a id="line-301" name="line-301"></a><span class="w"> </span><span class="p">}</span> +<a id="line-302" name="line-302"></a><span class="p">}</span> +<a id="line-303" name="line-303"></a> +<a id="line-304" name="line-304"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-305" name="line-305"></a><span class="nf">handle_shell_touch</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-306" name="line-306"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">path</span><span class="p">;</span> +<a id="line-307" name="line-307"></a> +<a id="line-308" name="line-308"></a><span class="w"> </span><span class="c1">// debug_enter();</span> +<a id="line-309" name="line-309"></a> +<a id="line-310" name="line-310"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span> +<a id="line-311" name="line-311"></a><span class="w"> </span><span class="n">path</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="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'/'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-312" name="line-312"></a><span class="hll"><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'file' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-313" name="line-313"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a id="line-314" name="line-314"></a> +<a id="line-315" name="line-315"></a><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">canonicalize_path</span><span class="p">(</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> +<a id="line-316" name="line-316"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-317" name="line-317"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shell touch for %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span> +<a id="line-318" name="line-318"></a> +<a id="line-319" name="line-319"></a><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span> +<a id="line-320" name="line-320"></a> +<a id="line-321" name="line-321"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-322" name="line-322"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"gonna reset %s"</span><span class="p">,</span><span class="w"> </span><span class="n">filename</span><span class="p">);</span> +<a id="line-323" name="line-323"></a><span class="w"> </span><span class="n">reset_file</span><span class="p">(</span><span class="n">file</span><span class="p">);</span> +<a id="line-324" name="line-324"></a><span class="w"> </span><span class="p">}</span> +<a id="line-325" name="line-325"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a id="line-326" name="line-326"></a><span class="w"> </span><span class="p">}</span> +<a id="line-327" name="line-327"></a><span class="w"> </span><span class="p">}</span> +<a id="line-328" name="line-328"></a> +<a id="line-329" name="line-329"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-330" name="line-330"></a><span class="p">}</span> +<a id="line-331" name="line-331"></a> +<a id="line-332" name="line-332"></a><span class="n">gboolean</span> +<a id="line-333" name="line-333"></a><span class="nf">caja_dropbox_finish_file_info_command</span><span class="p">(</span><span class="n">DropboxFileInfoCommandResponse</span><span class="w"> </span><span class="o">*</span><span class="n">dficr</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-334" name="line-334"></a> +<a id="line-335" name="line-335"></a><span class="w"> </span><span class="c1">//debug_enter();</span> +<a id="line-336" name="line-336"></a><span class="w"> </span><span class="n">CajaOperationResult</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_FAILED</span><span class="p">;</span> +<a id="line-337" name="line-337"></a> +<a id="line-338" name="line-338"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-339" name="line-339"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-340" name="line-340"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">isdir</span><span class="p">;</span> +<a id="line-341" name="line-341"></a> +<a id="line-342" name="line-342"></a><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_is_directory</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">)</span><span class="w"> </span><span class="p">;</span> +<a id="line-343" name="line-343"></a> +<a id="line-344" name="line-344"></a><span class="w"> </span><span class="cm">/* if we have emblems just use them. */</span> +<a id="line-345" name="line-345"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span> +<a id="line-346" name="line-346"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">"emblems"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-347" name="line-347"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span> +<a id="line-348" name="line-348"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-349" name="line-349"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> +<a id="line-350" name="line-350"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a id="line-351" name="line-351"></a><span class="w"> </span><span class="p">}</span> +<a id="line-352" name="line-352"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a id="line-353" name="line-353"></a><span class="w"> </span><span class="p">}</span> +<a id="line-354" name="line-354"></a><span class="w"> </span><span class="cm">/* if the file status command went okay */</span> +<a id="line-355" name="line-355"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span> +<a id="line-356" name="line-356"></a><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="w"> </span><span class="o">=</span> +<a id="line-357" name="line-357"></a><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">"status"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span> +<a id="line-358" name="line-358"></a><span class="w"> </span><span class="p">((</span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">TRUE</span><span class="w"> </span><span class="o">&&</span> +<a id="line-359" name="line-359"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">isdir</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> +<a id="line-360" name="line-360"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-361" name="line-361"></a> +<a id="line-362" name="line-362"></a><span class="w"> </span><span class="cm">/* set the tag emblem */</span> +<a id="line-363" name="line-363"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">isdir</span><span class="w"> </span><span class="o">&&</span> +<a id="line-364" name="line-364"></a><span class="w"> </span><span class="p">(</span><span class="n">tag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">"tag"</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-365" name="line-365"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"public"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-366" name="line-366"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"web"</span><span class="p">);</span> +<a id="line-367" name="line-367"></a><span class="w"> </span><span class="p">}</span> +<a id="line-368" name="line-368"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"shared"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-369" name="line-369"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"people"</span><span class="p">);</span> +<a id="line-370" name="line-370"></a><span class="w"> </span><span class="p">}</span> +<a id="line-371" name="line-371"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"photos"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-372" name="line-372"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"photos"</span><span class="p">);</span> +<a id="line-373" name="line-373"></a><span class="w"> </span><span class="p">}</span> +<a id="line-374" name="line-374"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"sandbox"</span><span class="p">,</span><span class="w"> </span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-375" name="line-375"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">"star"</span><span class="p">);</span> +<a id="line-376" name="line-376"></a><span class="w"> </span><span class="p">}</span> +<a id="line-377" name="line-377"></a><span class="w"> </span><span class="p">}</span> +<a id="line-378" name="line-378"></a> +<a id="line-379" name="line-379"></a><span class="w"> </span><span class="cm">/* set the status emblem */</span> +<a id="line-380" name="line-380"></a><span class="w"> </span><span class="p">{</span> +<a id="line-381" name="line-381"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-382" name="line-382"></a> +<a id="line-383" name="line-383"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"up to date"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-384" name="line-384"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> +<a id="line-385" name="line-385"></a><span class="w"> </span><span class="p">}</span> +<a id="line-386" name="line-386"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"syncing"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-387" name="line-387"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span> +<a id="line-388" name="line-388"></a><span class="w"> </span><span class="p">}</span> +<a id="line-389" name="line-389"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="s">"unsyncable"</span><span class="p">,</span><span class="w"> </span><span class="n">status</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-390" name="line-390"></a><span class="w"> </span><span class="n">emblem_code</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> +<a id="line-391" name="line-391"></a><span class="w"> </span><span class="p">}</span> +<a id="line-392" name="line-392"></a> +<a id="line-393" name="line-393"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_code</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-394" name="line-394"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-395" name="line-395"></a><span class="cm"> debug("%s to %s", emblems[emblem_code-1],</span> +<a id="line-396" name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr->dfic->file),</span> +<a id="line-397" name="line-397"></a><span class="cm"> NULL, NULL));</span> +<a id="line-398" name="line-398"></a><span class="cm"> */</span> +<a id="line-399" name="line-399"></a><span class="w"> </span><span class="n">caja_file_info_add_emblem</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">emblems</span><span class="p">[</span><span class="n">emblem_code</span><span class="mi">-1</span><span class="p">]);</span> +<a id="line-400" name="line-400"></a><span class="w"> </span><span class="p">}</span> +<a id="line-401" name="line-401"></a><span class="w"> </span><span class="p">}</span> +<a id="line-402" name="line-402"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_OPERATION_COMPLETE</span><span class="p">;</span> +<a id="line-403" name="line-403"></a><span class="w"> </span><span class="p">}</span> +<a id="line-404" name="line-404"></a><span class="w"> </span><span class="p">}</span> +<a id="line-405" name="line-405"></a> +<a id="line-406" name="line-406"></a><span class="w"> </span><span class="cm">/* complete the info request */</span> +<a id="line-407" name="line-407"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-408" name="line-408"></a><span class="w"> </span><span class="n">caja_info_provider_update_complete_invoke</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">,</span> +<a id="line-409" name="line-409"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">provider</span><span class="p">,</span> +<a id="line-410" name="line-410"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaOperationHandle</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">,</span> +<a id="line-411" name="line-411"></a><span class="w"> </span><span class="n">result</span><span class="p">);</span> +<a id="line-412" name="line-412"></a><span class="w"> </span><span class="p">}</span> +<a id="line-413" name="line-413"></a> +<a id="line-414" name="line-414"></a><span class="w"> </span><span class="cm">/* destroy the objects we created */</span> +<a id="line-415" name="line-415"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span> +<a id="line-416" name="line-416"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">file_status_response</span><span class="p">);</span> +<a id="line-417" name="line-417"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span> +<a id="line-418" name="line-418"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">folder_tag_response</span><span class="p">);</span> +<a id="line-419" name="line-419"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span> +<a id="line-420" name="line-420"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">emblems_response</span><span class="p">);</span> +<a id="line-421" name="line-421"></a> +<a id="line-422" name="line-422"></a><span class="w"> </span><span class="cm">/* unref the objects we didn't create */</span> +<a id="line-423" name="line-423"></a><span class="w"> </span><span class="n">g_closure_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">update_complete</span><span class="p">);</span> +<a id="line-424" name="line-424"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="o">-></span><span class="n">file</span><span class="p">);</span> +<a id="line-425" name="line-425"></a> +<a id="line-426" name="line-426"></a><span class="w"> </span><span class="cm">/* now free the structs */</span> +<a id="line-427" name="line-427"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="o">-></span><span class="n">dfic</span><span class="p">);</span> +<a id="line-428" name="line-428"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">dficr</span><span class="p">);</span> +<a id="line-429" name="line-429"></a> +<a id="line-430" name="line-430"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-431" name="line-431"></a><span class="p">}</span> +<a id="line-432" name="line-432"></a> +<a id="line-433" name="line-433"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-434" name="line-434"></a><span class="nf">caja_dropbox_cancel_update</span><span class="p">(</span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a id="line-435" name="line-435"></a><span class="w"> </span><span class="n">CajaOperationHandle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-436" name="line-436"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">handle</span><span class="p">;</span> +<a id="line-437" name="line-437"></a><span class="w"> </span><span class="n">dfic</span><span class="o">-></span><span class="n">cancelled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-438" name="line-438"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-439" name="line-439"></a><span class="p">}</span> +<a id="line-440" name="line-440"></a> +<a id="line-441" name="line-441"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-442" name="line-442"></a><span class="nf">menu_item_cb</span><span class="p">(</span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">,</span> +<a id="line-443" name="line-443"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-444" name="line-444"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">verb</span><span class="p">;</span> +<a id="line-445" name="line-445"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">;</span> +<a id="line-446" name="line-446"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dcac</span><span class="p">;</span> +<a id="line-447" name="line-447"></a> +<a id="line-448" name="line-448"></a><span class="w"> </span><span class="n">dcac</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-449" name="line-449"></a> +<a id="line-450" name="line-450"></a><span class="w"> </span><span class="cm">/* maybe these would be better passed in a container</span> +<a id="line-451" name="line-451"></a><span class="cm"> struct used as the userdata pointer, oh well this</span> +<a id="line-452" name="line-452"></a><span class="cm"> is how dave camp does it */</span> +<a id="line-453" name="line-453"></a><span class="w"> </span><span class="n">files</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">);</span> +<a id="line-454" name="line-454"></a><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_object_get_data</span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">);</span> +<a id="line-455" name="line-455"></a> +<a id="line-456" name="line-456"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a id="line-457" name="line-457"></a> +<a id="line-458" name="line-458"></a><span class="w"> </span><span class="cm">/* build the argument list */</span> +<a id="line-459" name="line-459"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-460" name="line-460"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-461" name="line-461"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span> +<a id="line-462" name="line-462"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span> +<a id="line-463" name="line-463"></a><span class="w"> </span><span class="p">{</span> +<a id="line-464" name="line-464"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span> +<a id="line-465" name="line-465"></a><span class="w"> </span><span class="n">guint</span><span class="w"> </span><span class="n">i</span><span class="p">;</span> +<a id="line-466" name="line-466"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">li</span><span class="p">;</span> +<a id="line-467" name="line-467"></a> +<a id="line-468" name="line-468"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-469" name="line-469"></a> +<a id="line-470" name="line-470"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">li</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_next</span><span class="p">(</span><span class="n">li</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> +<a id="line-471" name="line-471"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">CAJA_FILE_INFO</span><span class="p">(</span><span class="n">li</span><span class="o">-></span><span class="n">data</span><span class="p">));</span> +<a id="line-472" name="line-472"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-473" name="line-473"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a id="line-474" name="line-474"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">path</span><span class="p">)</span> +<a id="line-475" name="line-475"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span> +<a id="line-476" name="line-476"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">path</span><span class="p">;</span> +<a id="line-477" name="line-477"></a><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">;</span> +<a id="line-478" name="line-478"></a><span class="w"> </span><span class="p">}</span> +<a id="line-479" name="line-479"></a> +<a id="line-480" name="line-480"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span> +<a id="line-481" name="line-481"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span> +<a id="line-482" name="line-482"></a><span class="w"> </span><span class="n">arglist</span><span class="p">);</span> +<a id="line-483" name="line-483"></a><span class="w"> </span><span class="p">}</span> +<a id="line-484" name="line-484"></a> +<a id="line-485" name="line-485"></a><span class="w"> </span><span class="p">{</span> +<a id="line-486" name="line-486"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">arglist</span><span class="p">;</span> +<a id="line-487" name="line-487"></a><span class="w"> </span><span class="n">arglist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span> +<a id="line-488" name="line-488"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">);</span> +<a id="line-489" name="line-489"></a><span class="w"> </span><span class="n">arglist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-490" name="line-490"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dcac</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"verb"</span><span class="p">),</span><span class="w"> </span><span class="n">arglist</span><span class="p">);</span> +<a id="line-491" name="line-491"></a><span class="w"> </span><span class="p">}</span> +<a id="line-492" name="line-492"></a> +<a id="line-493" name="line-493"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_action"</span><span class="p">);</span> +<a id="line-494" name="line-494"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-495" name="line-495"></a><span class="w"> </span><span class="n">dcac</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-496" name="line-496"></a> +<a id="line-497" name="line-497"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dcac</span><span class="p">);</span> +<a id="line-498" name="line-498"></a><span class="p">}</span> +<a id="line-499" name="line-499"></a> +<a id="line-500" name="line-500"></a><span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="nf">from_hex</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-501" name="line-501"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">isdigit</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">ch</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'0'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">tolower</span><span class="p">(</span><span class="n">ch</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="sc">'a'</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span> +<a id="line-502" name="line-502"></a><span class="p">}</span> +<a id="line-503" name="line-503"></a> +<a id="line-504" name="line-504"></a><span class="c1">// decode in --> out, but dont fill more than n chars into out</span> +<a id="line-505" name="line-505"></a><span class="c1">// returns len of out if thing went well, -1 if n wasn't big enough</span> +<a id="line-506" name="line-506"></a><span class="c1">// can be used in place (whoa!)</span> +<a id="line-507" name="line-507"></a><span class="kt">int</span><span class="w"> </span><span class="nf">GhettoURLDecode</span><span class="p">(</span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">out</span><span class="p">,</span><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-508" name="line-508"></a><span class="hll"><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">out_initial</span><span class="p">;</span><span class="error2"><--- Variable 'out_initial' can be declared as pointer to const</span> +</span><a id="line-509" name="line-509"></a> +<a id="line-510" name="line-510"></a><span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="n">out_initial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">out</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-511" name="line-511"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">in</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'%'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-512" name="line-512"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> +<a id="line-513" name="line-513"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">from_hex</span><span class="p">(</span><span class="n">in</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span> +<a id="line-514" name="line-514"></a><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span> +<a id="line-515" name="line-515"></a><span class="w"> </span><span class="p">}</span> +<a id="line-516" name="line-516"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-517" name="line-517"></a><span class="w"> </span><span class="c1">// Input string isn't well-formed</span> +<a id="line-518" name="line-518"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span> +<a id="line-519" name="line-519"></a><span class="w"> </span><span class="p">}</span> +<a id="line-520" name="line-520"></a><span class="w"> </span><span class="p">}</span> +<a id="line-521" name="line-521"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-522" name="line-522"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">*</span><span class="n">in</span><span class="p">;</span> +<a id="line-523" name="line-523"></a><span class="w"> </span><span class="n">in</span><span class="o">++</span><span class="p">;</span> +<a id="line-524" name="line-524"></a><span class="w"> </span><span class="p">}</span> +<a id="line-525" name="line-525"></a><span class="w"> </span><span class="p">}</span> +<a id="line-526" name="line-526"></a> +<a id="line-527" name="line-527"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-528" name="line-528"></a><span class="w"> </span><span class="o">*</span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">'\0'</span><span class="p">;</span> +<a id="line-529" name="line-529"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">out</span><span class="o">-</span><span class="n">out_initial</span><span class="p">;</span> +<a id="line-530" name="line-530"></a><span class="w"> </span><span class="p">}</span> +<a id="line-531" name="line-531"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span> +<a id="line-532" name="line-532"></a><span class="p">}</span> +<a id="line-533" name="line-533"></a> +<a id="line-534" name="line-534"></a><span class="k">static</span><span class="w"> </span><span class="kt">int</span> +<a id="line-535" name="line-535"></a><span class="nf">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">,</span> +<a id="line-536" name="line-536"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">menu</span><span class="p">,</span> +<a id="line-537" name="line-537"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">old_action_string</span><span class="p">,</span> +<a id="line-538" name="line-538"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="p">,</span> +<a id="line-539" name="line-539"></a><span class="w"> </span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a id="line-540" name="line-540"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span> +<a id="line-541" name="line-541"></a><span class="p">{</span> +<a id="line-542" name="line-542"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-543" name="line-543"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span> +<a id="line-544" name="line-544"></a> +<a id="line-545" name="line-545"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-546" name="line-546"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">option_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="s">"~"</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span> +<a id="line-547" name="line-547"></a><span class="w"> </span><span class="cm">/* if this is a valid string */</span> +<a id="line-548" name="line-548"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span> +<a id="line-549" name="line-549"></a><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-550" name="line-550"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span> +<a id="line-551" name="line-551"></a><span class="w"> </span><span class="k">continue</span><span class="p">;</span> +<a id="line-552" name="line-552"></a><span class="w"> </span><span class="p">}</span> +<a id="line-553" name="line-553"></a> +<a id="line-554" name="line-554"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> +<a id="line-555" name="line-555"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">item_inner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> +<a id="line-556" name="line-556"></a><span class="w"> </span><span class="n">gchar</span><span class="o">*</span><span class="w"> </span><span class="n">verb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">option_info</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> +<a id="line-557" name="line-557"></a> +<a id="line-558" name="line-558"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_name</span><span class="p">));</span> +<a id="line-559" name="line-559"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">verb</span><span class="p">));</span> +<a id="line-560" name="line-560"></a><span class="w"> </span><span class="n">GhettoURLDecode</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">item_inner</span><span class="p">));</span> +<a id="line-561" name="line-561"></a> +<a id="line-562" name="line-562"></a><span class="w"> </span><span class="c1">// If the inner section has a menu in it then we create a submenu. The verb will be ignored.</span> +<a id="line-563" name="line-563"></a><span class="w"> </span><span class="c1">// Otherwise add the verb to our map and add the menu item to the list.</span> +<a id="line-564" name="line-564"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="sc">'~'</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-565" name="line-565"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span> +<a id="line-566" name="line-566"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">suboptions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strsplit</span><span class="p">(</span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="s">"|"</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">);</span> +<a id="line-567" name="line-567"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span> +<a id="line-568" name="line-568"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">submenu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span> +<a id="line-569" name="line-569"></a> +<a id="line-570" name="line-570"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">);</span> +<a id="line-571" name="line-571"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="s">"::"</span><span class="p">);</span> +<a id="line-572" name="line-572"></a> +<a id="line-573" name="line-573"></a><span class="w"> </span><span class="n">ret</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">suboptions</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">,</span><span class="w"> </span><span class="n">new_action_string</span><span class="p">,</span> +<a id="line-574" name="line-574"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">);</span> +<a id="line-575" name="line-575"></a> +<a id="line-576" name="line-576"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span> +<a id="line-577" name="line-577"></a><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="s">""</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-578" name="line-578"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="n">submenu</span><span class="p">);</span> +<a id="line-579" name="line-579"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span> +<a id="line-580" name="line-580"></a> +<a id="line-581" name="line-581"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">suboptions</span><span class="p">);</span> +<a id="line-582" name="line-582"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> +<a id="line-583" name="line-583"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">submenu</span><span class="p">);</span> +<a id="line-584" name="line-584"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span> +<a id="line-585" name="line-585"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-586" name="line-586"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">item</span><span class="p">;</span> +<a id="line-587" name="line-587"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">new_action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="n">old_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">);</span> +<a id="line-588" name="line-588"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-589" name="line-589"></a> +<a id="line-590" name="line-590"></a><span class="w"> </span><span class="n">g_string_append</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">verb</span><span class="p">);</span> +<a id="line-591" name="line-591"></a> +<a id="line-592" name="line-592"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">item_name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">'!'</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-593" name="line-593"></a><span class="w"> </span><span class="n">item_name</span><span class="o">++</span><span class="p">;</span> +<a id="line-594" name="line-594"></a><span class="w"> </span><span class="n">grayed_out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-595" name="line-595"></a><span class="w"> </span><span class="p">}</span> +<a id="line-596" name="line-596"></a> +<a id="line-597" name="line-597"></a><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="n">new_action_string</span><span class="o">-></span><span class="n">str</span><span class="p">,</span><span class="w"> </span><span class="n">item_name</span><span class="p">,</span><span class="w"> </span><span class="n">item_inner</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-598" name="line-598"></a> +<a id="line-599" name="line-599"></a><span class="w"> </span><span class="n">caja_menu_append_item</span><span class="p">(</span><span class="n">menu</span><span class="p">,</span><span class="w"> </span><span class="n">item</span><span class="p">);</span> +<a id="line-600" name="line-600"></a><span class="w"> </span><span class="cm">/* add the file metadata to this item */</span> +<a id="line-601" name="line-601"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_files"</span><span class="p">,</span> +<a id="line-602" name="line-602"></a><span class="w"> </span><span class="n">caja_file_info_list_copy</span><span class="w"> </span><span class="p">(</span><span class="n">files</span><span class="p">),</span> +<a id="line-603" name="line-603"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">caja_file_info_list_free</span><span class="p">);</span> +<a id="line-604" name="line-604"></a><span class="w"> </span><span class="cm">/* add the verb metadata */</span> +<a id="line-605" name="line-605"></a><span class="w"> </span><span class="n">g_object_set_data_full</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"caja_dropbox_verb"</span><span class="p">,</span> +<a id="line-606" name="line-606"></a><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="n">verb</span><span class="p">),</span> +<a id="line-607" name="line-607"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span> +<a id="line-608" name="line-608"></a><span class="w"> </span><span class="n">g_signal_connect</span><span class="w"> </span><span class="p">(</span><span class="n">item</span><span class="p">,</span><span class="w"> </span><span class="s">"activate"</span><span class="p">,</span><span class="w"> </span><span class="n">G_CALLBACK</span><span class="w"> </span><span class="p">(</span><span class="n">menu_item_cb</span><span class="p">),</span><span class="w"> </span><span class="n">provider</span><span class="p">);</span> +<a id="line-609" name="line-609"></a> +<a id="line-610" name="line-610"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">grayed_out</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-611" name="line-611"></a><span class="w"> </span><span class="n">GValue</span><span class="w"> </span><span class="n">sensitive</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">};</span> +<a id="line-612" name="line-612"></a><span class="w"> </span><span class="n">g_value_init</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">G_TYPE_BOOLEAN</span><span class="p">);</span> +<a id="line-613" name="line-613"></a><span class="w"> </span><span class="n">g_value_set_boolean</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">sensitive</span><span class="p">,</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span> +<a id="line-614" name="line-614"></a><span class="w"> </span><span class="n">g_object_set_property</span><span class="w"> </span><span class="p">(</span><span class="n">G_OBJECT</span><span class="p">(</span><span class="n">item</span><span class="p">),</span><span class="w"> </span><span class="s">"sensitive"</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">sensitive</span><span class="p">);</span> +<a id="line-615" name="line-615"></a><span class="w"> </span><span class="p">}</span> +<a id="line-616" name="line-616"></a> +<a id="line-617" name="line-617"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> +<a id="line-618" name="line-618"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">new_action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span> +<a id="line-619" name="line-619"></a><span class="w"> </span><span class="n">ret</span><span class="o">++</span><span class="p">;</span> +<a id="line-620" name="line-620"></a><span class="w"> </span><span class="p">}</span> +<a id="line-621" name="line-621"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">option_info</span><span class="p">);</span> +<a id="line-622" name="line-622"></a><span class="w"> </span><span class="p">}</span> +<a id="line-623" name="line-623"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span> +<a id="line-624" name="line-624"></a><span class="p">}</span> +<a id="line-625" name="line-625"></a> +<a id="line-626" name="line-626"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-627" name="line-627"></a><span class="nf">get_file_items_callback</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span> +<a id="line-628" name="line-628"></a><span class="p">{</span> +<a id="line-629" name="line-629"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-630" name="line-630"></a> +<a id="line-631" name="line-631"></a><span class="w"> </span><span class="cm">/* queue_push doesn't accept NULL as a value so we create an empty hash table</span> +<a id="line-632" name="line-632"></a><span class="cm"> * if we got no response. */</span> +<a id="line-633" name="line-633"></a><span class="w"> </span><span class="n">g_async_queue_push</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">response</span><span class="p">)</span><span class="w"> </span><span class="o">:</span> +<a id="line-634" name="line-634"></a><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">));</span> +<a id="line-635" name="line-635"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a id="line-636" name="line-636"></a><span class="p">}</span> +<a id="line-637" name="line-637"></a> +<a id="line-638" name="line-638"></a> +<a id="line-639" name="line-639"></a><span class="k">static</span><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span> +<a id="line-640" name="line-640"></a><span class="nf">caja_dropbox_get_file_items</span><span class="p">(</span><span class="n">CajaMenuProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">,</span> +<a id="line-641" name="line-641"></a><span class="w"> </span><span class="n">GtkWidget</span><span class="w"> </span><span class="o">*</span><span class="n">window</span><span class="p">,</span> +<a id="line-642" name="line-642"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">files</span><span class="p">)</span> +<a id="line-643" name="line-643"></a><span class="p">{</span> +<a id="line-644" name="line-644"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-645" name="line-645"></a><span class="cm"> * 1. Convert files to filenames.</span> +<a id="line-646" name="line-646"></a><span class="cm"> */</span> +<a id="line-647" name="line-647"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_length</span><span class="p">(</span><span class="n">files</span><span class="p">);</span> +<a id="line-648" name="line-648"></a> +<a id="line-649" name="line-649"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file_count</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span> +<a id="line-650" name="line-650"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-651" name="line-651"></a> +<a id="line-652" name="line-652"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">file_count</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-653" name="line-653"></a><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-654" name="line-654"></a><span class="w"> </span><span class="n">GList</span><span class="o">*</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span> +<a id="line-655" name="line-655"></a> +<a id="line-656" name="line-656"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">files</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="p">;</span><span class="w"> </span><span class="n">elem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elem</span><span class="o">-></span><span class="n">next</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-657" name="line-657"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">uri</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_file_info_get_uri</span><span class="p">(</span><span class="n">elem</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> +<a id="line-658" name="line-658"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename_un</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">uri</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_from_uri</span><span class="p">(</span><span class="n">uri</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-659" name="line-659"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename_un</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">g_filename_to_utf8</span><span class="p">(</span><span class="n">filename_un</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-660" name="line-660"></a> +<a id="line-661" name="line-661"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span> +<a id="line-662" name="line-662"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">filename_un</span><span class="p">);</span> +<a id="line-663" name="line-663"></a> +<a id="line-664" name="line-664"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">filename</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-665" name="line-665"></a><span class="w"> </span><span class="cm">/* oooh, filename wasn't correctly encoded, or isn't a local file. */</span> +<a id="line-666" name="line-666"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span> +<a id="line-667" name="line-667"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-668" name="line-668"></a><span class="w"> </span><span class="p">}</span> +<a id="line-669" name="line-669"></a> +<a id="line-670" name="line-670"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">filename</span><span class="p">;</span> +<a id="line-671" name="line-671"></a><span class="w"> </span><span class="p">}</span> +<a id="line-672" name="line-672"></a> +<a id="line-673" name="line-673"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">reply_queue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_new_full</span><span class="p">((</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="n">g_hash_table_unref</span><span class="p">);</span> +<a id="line-674" name="line-674"></a> +<a id="line-675" name="line-675"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-676" name="line-676"></a><span class="cm"> * 2. Create a DropboxGeneralCommand to call "icon_overlay_context_options"</span> +<a id="line-677" name="line-677"></a><span class="cm"> */</span> +<a id="line-678" name="line-678"></a> +<a id="line-679" name="line-679"></a><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dgc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_new0</span><span class="p">(</span><span class="n">DropboxGeneralCommand</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span> +<a id="line-680" name="line-680"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">request_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">;</span> +<a id="line-681" name="line-681"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"icon_overlay_context_options"</span><span class="p">);</span> +<a id="line-682" name="line-682"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-683" name="line-683"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-684" name="line-684"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span> +<a id="line-685" name="line-685"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_strfreev</span><span class="p">);</span> +<a id="line-686" name="line-686"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">dgc</span><span class="o">-></span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="n">g_strdup</span><span class="p">(</span><span class="s">"paths"</span><span class="p">),</span><span class="w"> </span><span class="n">paths</span><span class="p">);</span> +<a id="line-687" name="line-687"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">get_file_items_callback</span><span class="p">;</span> +<a id="line-688" name="line-688"></a><span class="w"> </span><span class="n">dgc</span><span class="o">-></span><span class="n">handler_ud</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_ref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a id="line-689" name="line-689"></a> +<a id="line-690" name="line-690"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-691" name="line-691"></a><span class="cm"> * 3. Queue it up for the helper thread to run it.</span> +<a id="line-692" name="line-692"></a><span class="cm"> */</span> +<a id="line-693" name="line-693"></a><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CAJA_DROPBOX</span><span class="p">(</span><span class="n">provider</span><span class="p">);</span> +<a id="line-694" name="line-694"></a><span class="w"> </span><span class="n">dropbox_command_client_request</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">dgc</span><span class="p">);</span> +<a id="line-695" name="line-695"></a> +<a id="line-696" name="line-696"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-697" name="line-697"></a><span class="cm"> * 4. We have to block until it's done because caja expects a reply. But we will</span> +<a id="line-698" name="line-698"></a><span class="cm"> * only block for 50 ms for a reply.</span> +<a id="line-699" name="line-699"></a><span class="cm"> */</span> +<a id="line-700" name="line-700"></a> +<a id="line-701" name="line-701"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">context_options_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_async_queue_timeout_pop</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">,</span><span class="w"> </span><span class="mi">50000</span><span class="p">);</span> +<a id="line-702" name="line-702"></a><span class="w"> </span><span class="n">g_async_queue_unref</span><span class="p">(</span><span class="n">reply_queue</span><span class="p">);</span> +<a id="line-703" name="line-703"></a> +<a id="line-704" name="line-704"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">context_options_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-705" name="line-705"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-706" name="line-706"></a><span class="w"> </span><span class="p">}</span> +<a id="line-707" name="line-707"></a> +<a id="line-708" name="line-708"></a><span class="w"> </span><span class="cm">/*</span> +<a id="line-709" name="line-709"></a><span class="cm"> * 5. Parse the reply.</span> +<a id="line-710" name="line-710"></a><span class="cm"> */</span> +<a id="line-711" name="line-711"></a> +<a id="line-712" name="line-712"></a><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">,</span><span class="w"> </span><span class="s">"options"</span><span class="p">);</span> +<a id="line-713" name="line-713"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-714" name="line-714"></a> +<a id="line-715" name="line-715"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="o">**</span><span class="n">options</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-716" name="line-716"></a><span class="w"> </span><span class="cm">/* build the menu */</span> +<a id="line-717" name="line-717"></a><span class="w"> </span><span class="n">CajaMenuItem</span><span class="w"> </span><span class="o">*</span><span class="n">root_item</span><span class="p">;</span> +<a id="line-718" name="line-718"></a><span class="w"> </span><span class="n">CajaMenu</span><span class="w"> </span><span class="o">*</span><span class="n">root_menu</span><span class="p">;</span> +<a id="line-719" name="line-719"></a> +<a id="line-720" name="line-720"></a><span class="w"> </span><span class="n">root_menu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_new</span><span class="p">();</span> +<a id="line-721" name="line-721"></a><span class="w"> </span><span class="n">root_item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_menu_item_new</span><span class="p">(</span><span class="s">"CajaDropbox::root_item"</span><span class="p">,</span> +<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">"Dropbox"</span><span class="p">,</span><span class="w"> </span><span class="s">"Dropbox Options"</span><span class="p">,</span><span class="w"> </span><span class="s">"dropbox"</span><span class="p">);</span> +<a id="line-723" name="line-723"></a> +<a id="line-724" name="line-724"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_list_append</span><span class="p">(</span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">root_item</span><span class="p">);</span> +<a id="line-725" name="line-725"></a><span class="w"> </span><span class="n">GString</span><span class="w"> </span><span class="o">*</span><span class="n">action_string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_string_new</span><span class="p">(</span><span class="s">"CajaDropbox::"</span><span class="p">);</span> +<a id="line-726" name="line-726"></a> +<a id="line-727" name="line-727"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">caja_dropbox_parse_menu</span><span class="p">(</span><span class="n">options</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">,</span><span class="w"> </span><span class="n">action_string</span><span class="p">,</span> +<a id="line-728" name="line-728"></a><span class="w"> </span><span class="n">toret</span><span class="p">,</span><span class="w"> </span><span class="n">provider</span><span class="p">,</span><span class="w"> </span><span class="n">files</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> +<a id="line-729" name="line-729"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">toret</span><span class="p">);</span> +<a id="line-730" name="line-730"></a><span class="w"> </span><span class="n">toret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-731" name="line-731"></a><span class="w"> </span><span class="p">}</span> +<a id="line-732" name="line-732"></a> +<a id="line-733" name="line-733"></a><span class="w"> </span><span class="n">caja_menu_item_set_submenu</span><span class="p">(</span><span class="n">root_item</span><span class="p">,</span><span class="w"> </span><span class="n">root_menu</span><span class="p">);</span> +<a id="line-734" name="line-734"></a> +<a id="line-735" name="line-735"></a><span class="w"> </span><span class="n">g_string_free</span><span class="p">(</span><span class="n">action_string</span><span class="p">,</span><span class="w"> </span><span class="n">TRUE</span><span class="p">);</span> +<a id="line-736" name="line-736"></a><span class="w"> </span><span class="n">g_object_unref</span><span class="p">(</span><span class="n">root_menu</span><span class="p">);</span> +<a id="line-737" name="line-737"></a><span class="w"> </span><span class="p">}</span> +<a id="line-738" name="line-738"></a> +<a id="line-739" name="line-739"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">context_options_response</span><span class="p">);</span> +<a id="line-740" name="line-740"></a> +<a id="line-741" name="line-741"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">toret</span><span class="p">;</span> +<a id="line-742" name="line-742"></a><span class="p">}</span> +<a id="line-743" name="line-743"></a> +<a id="line-744" name="line-744"></a><span class="n">gboolean</span> +<a id="line-745" name="line-745"></a><span class="nf">add_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span> +<a id="line-746" name="line-746"></a><span class="p">{</span> +<a id="line-747" name="line-747"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a id="line-748" name="line-748"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span> +<a id="line-749" name="line-749"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-750" name="line-750"></a> +<a id="line-751" name="line-751"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="p">;</span> +<a id="line-752" name="line-752"></a><span class="hll"><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a id="line-753" name="line-753"></a> +<a id="line-754" name="line-754"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="n">theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span> +<a id="line-755" name="line-755"></a> +<a id="line-756" name="line-756"></a><span class="hll"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">&&</span><span class="error2"><--- Condition 'emblem_paths_response' is always true</span> +</span><a id="line-757" name="line-757"></a><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span> +<a id="line-758" name="line-758"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-759" name="line-759"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> +<a id="line-760" name="line-760"></a><span class="w"> </span><span class="n">gtk_icon_theme_append_search_path</span><span class="p">(</span><span class="n">theme</span><span class="p">,</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a id="line-761" name="line-761"></a><span class="w"> </span><span class="p">}</span> +<a id="line-762" name="line-762"></a><span class="w"> </span><span class="p">}</span> +<a id="line-763" name="line-763"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a id="line-764" name="line-764"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-765" name="line-765"></a><span class="p">}</span> +<a id="line-766" name="line-766"></a> +<a id="line-767" name="line-767"></a><span class="n">gboolean</span> +<a id="line-768" name="line-768"></a><span class="nf">remove_emblem_paths</span><span class="p">(</span><span class="n">GHashTable</span><span class="o">*</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">)</span> +<a id="line-769" name="line-769"></a><span class="p">{</span> +<a id="line-770" name="line-770"></a><span class="w"> </span><span class="cm">/* Only run this on the main loop or you'll cause problems. */</span> +<a id="line-771" name="line-771"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span> +<a id="line-772" name="line-772"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-773" name="line-773"></a> +<a id="line-774" name="line-774"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="n">emblem_paths_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_lookup</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">);</span> +<a id="line-775" name="line-775"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_list</span><span class="p">)</span> +<a id="line-776" name="line-776"></a><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">exit</span><span class="p">;</span> +<a id="line-777" name="line-777"></a> +<a id="line-778" name="line-778"></a><span class="w"> </span><span class="c1">// We need to remove the old paths.</span> +<a id="line-779" name="line-779"></a><span class="w"> </span><span class="n">GtkIconTheme</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">icon_theme</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gtk_icon_theme_get_default</span><span class="p">();</span> +<a id="line-780" name="line-780"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="w"> </span><span class="n">paths</span><span class="p">;</span> +<a id="line-781" name="line-781"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span> +<a id="line-782" name="line-782"></a> +<a id="line-783" name="line-783"></a><span class="w"> </span><span class="n">gtk_icon_theme_get_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">path_count</span><span class="p">);</span> +<a id="line-784" name="line-784"></a> +<a id="line-785" name="line-785"></a><span class="w"> </span><span class="n">gint</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> +<a id="line-786" name="line-786"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-787" name="line-787"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">path_count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-788" name="line-788"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-789" name="line-789"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-790" name="line-790"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span><span class="w"> </span><span class="p">{</span> +<a id="line-791" name="line-791"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">g_strcmp0</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">emblem_paths_list</span><span class="p">[</span><span class="n">j</span><span class="p">]))</span><span class="w"> </span><span class="p">{</span> +<a id="line-792" name="line-792"></a><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-793" name="line-793"></a><span class="w"> </span><span class="n">keep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-794" name="line-794"></a><span class="w"> </span><span class="n">g_free</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a id="line-795" name="line-795"></a><span class="w"> </span><span class="k">break</span><span class="p">;</span> +<a id="line-796" name="line-796"></a><span class="w"> </span><span class="p">}</span> +<a id="line-797" name="line-797"></a><span class="w"> </span><span class="p">}</span> +<a id="line-798" name="line-798"></a><span class="w"> </span><span class="p">}</span> +<a id="line-799" name="line-799"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keep</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-800" name="line-800"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a id="line-801" name="line-801"></a><span class="w"> </span><span class="n">out</span><span class="o">++</span><span class="p">;</span> +<a id="line-802" name="line-802"></a><span class="w"> </span><span class="p">}</span> +<a id="line-803" name="line-803"></a><span class="w"> </span><span class="p">}</span> +<a id="line-804" name="line-804"></a> +<a id="line-805" name="line-805"></a><span class="w"> </span><span class="cm">/* If we found one we need to reset the path to</span> +<a id="line-806" name="line-806"></a><span class="cm"> accomodate the changes */</span> +<a id="line-807" name="line-807"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">found</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-808" name="line-808"></a><span class="w"> </span><span class="n">paths</span><span class="p">[</span><span class="n">out</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Clear the last one */</span> +<a id="line-809" name="line-809"></a><span class="w"> </span><span class="n">gtk_icon_theme_set_search_path</span><span class="p">(</span><span class="n">icon_theme</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">**</span><span class="p">)</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="n">out</span><span class="p">);</span> +<a id="line-810" name="line-810"></a><span class="w"> </span><span class="p">}</span> +<a id="line-811" name="line-811"></a> +<a id="line-812" name="line-812"></a><span class="w"> </span><span class="n">g_strfreev</span><span class="p">(</span><span class="n">paths</span><span class="p">);</span> +<a id="line-813" name="line-813"></a><span class="nl">exit</span><span class="p">:</span> +<a id="line-814" name="line-814"></a><span class="w"> </span><span class="n">g_hash_table_unref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a id="line-815" name="line-815"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-816" name="line-816"></a><span class="p">}</span> +<a id="line-817" name="line-817"></a> +<a id="line-818" name="line-818"></a><span class="kt">void</span><span class="w"> </span><span class="nf">get_emblem_paths_cb</span><span class="p">(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span> +<a id="line-819" name="line-819"></a><span class="p">{</span> +<a id="line-820" name="line-820"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">emblem_paths_response</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-821" name="line-821"></a><span class="w"> </span><span class="n">emblem_paths_response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-822" name="line-822"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">);</span> +<a id="line-823" name="line-823"></a><span class="w"> </span><span class="n">g_hash_table_insert</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">,</span><span class="w"> </span><span class="s">"path"</span><span class="p">,</span><span class="w"> </span><span class="n">DEFAULT_EMBLEM_PATHS</span><span class="p">);</span> +<a id="line-824" name="line-824"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-825" name="line-825"></a><span class="w"> </span><span class="cm">/* Increase the ref so that finish_general_command doesn't delete it. */</span> +<a id="line-826" name="line-826"></a><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">);</span> +<a id="line-827" name="line-827"></a><span class="w"> </span><span class="p">}</span> +<a id="line-828" name="line-828"></a> +<a id="line-829" name="line-829"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a id="line-830" name="line-830"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-831" name="line-831"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span> +<a id="line-832" name="line-832"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-833" name="line-833"></a><span class="w"> </span><span class="p">}</span> +<a id="line-834" name="line-834"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">emblem_paths_response</span><span class="p">;</span> +<a id="line-835" name="line-835"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a id="line-836" name="line-836"></a> +<a id="line-837" name="line-837"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">add_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">g_hash_table_ref</span><span class="p">(</span><span class="n">emblem_paths_response</span><span class="p">));</span> +<a id="line-838" name="line-838"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">reset_all_files</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-839" name="line-839"></a><span class="p">}</span> +<a id="line-840" name="line-840"></a> +<a id="line-841" name="line-841"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-842" name="line-842"></a><span class="nf">on_connect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-843" name="line-843"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span> +<a id="line-844" name="line-844"></a> +<a id="line-845" name="line-845"></a><span class="w"> </span><span class="n">dropbox_command_client_send_command</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">dcc</span><span class="p">),</span> +<a id="line-846" name="line-846"></a><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)</span><span class="w"> </span><span class="n">get_emblem_paths_cb</span><span class="p">,</span> +<a id="line-847" name="line-847"></a><span class="hll"><span class="w"> </span><span class="n">cvs</span><span class="p">,</span><span class="w"> </span><span class="s">"get_emblem_paths"</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><div class="verbose expandable"><span class="error2"><--- Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. <span class="marker">[+]</span></span><div class="content">Passing NULL after the last typed argument to a variadic function leads to undefined behaviour. +The C99 standard, in section 7.15.1.1, states that if the type used by va_arg() is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), the behavior is undefined. +The value of the NULL macro is an implementation-defined null pointer constant (7.17), which can be any integer constant expression with the value 0, or such an expression casted to (void*) (6.3.2.3). This includes values like 0, 0L, or even 0LL. +In practice on common architectures, this will cause real crashes if sizeof(int) != sizeof(void*), and NULL is defined to 0 or any other null pointer constant that promotes to int. +To reproduce you might be able to use this little code example on 64bit platforms. If the output includes "ERROR", the sentinel had only 4 out of 8 bytes initialized to zero and was not detected as the final argument to stop argument processing via va_arg(). Changing the 0 to (void*)0 or 0L will make the "ERROR" output go away. +#include <stdarg.h> +#include <stdio.h> + +void f(char *s, ...) { + va_list ap; + va_start(ap,s); + for (;;) { + char *p = va_arg(ap,char*); + printf("%018p, %s\n", p, (long)p & 255 ? p : ""); + if(!p) break; + } + va_end(ap); +} + +void g() { + char *s2 = "x"; + char *s3 = "ERROR"; + + // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64 + f("first", s2, s2, s2, s2, s2, 0, s3, (char*)0); +} + +void h() { + int i; + volatile unsigned char a[1000]; + for (i = 0; i<sizeof(a); i++) + a[i] = -1; +} + +int main() { + h(); + g(); + return 0; +}</div></div> +</span><a id="line-848" name="line-848"></a><span class="p">}</span> +<a id="line-849" name="line-849"></a> +<a id="line-850" name="line-850"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-851" name="line-851"></a><span class="nf">on_disconnect</span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-852" name="line-852"></a><span class="w"> </span><span class="n">reset_all_files</span><span class="p">(</span><span class="n">cvs</span><span class="p">);</span> +<a id="line-853" name="line-853"></a> +<a id="line-854" name="line-854"></a><span class="w"> </span><span class="n">g_mutex_lock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a id="line-855" name="line-855"></a><span class="w"> </span><span class="cm">/* This call will free the data too. */</span> +<a id="line-856" name="line-856"></a><span class="w"> </span><span class="n">g_idle_add</span><span class="p">((</span><span class="n">GSourceFunc</span><span class="p">)</span><span class="w"> </span><span class="n">remove_emblem_paths</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="p">);</span> +<a id="line-857" name="line-857"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-858" name="line-858"></a><span class="w"> </span><span class="n">g_mutex_unlock</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a id="line-859" name="line-859"></a><span class="p">}</span> +<a id="line-860" name="line-860"></a> +<a id="line-861" name="line-861"></a> +<a id="line-862" name="line-862"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-863" name="line-863"></a><span class="nf">caja_dropbox_menu_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaMenuProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-864" name="line-864"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">get_file_items</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_get_file_items</span><span class="p">;</span> +<a id="line-865" name="line-865"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-866" name="line-866"></a><span class="p">}</span> +<a id="line-867" name="line-867"></a> +<a id="line-868" name="line-868"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-869" name="line-869"></a><span class="nf">caja_dropbox_info_provider_iface_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaInfoProviderIface</span><span class="w"> </span><span class="o">*</span><span class="n">iface</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-870" name="line-870"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">update_file_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_update_file_info</span><span class="p">;</span> +<a id="line-871" name="line-871"></a><span class="w"> </span><span class="n">iface</span><span class="o">-></span><span class="n">cancel_update</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">caja_dropbox_cancel_update</span><span class="p">;</span> +<a id="line-872" name="line-872"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-873" name="line-873"></a><span class="p">}</span> +<a id="line-874" name="line-874"></a> +<a id="line-875" name="line-875"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-876" name="line-876"></a><span class="nf">caja_dropbox_instance_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="w"> </span><span class="o">*</span><span class="n">cvs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-877" name="line-877"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">filename2obj</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_hash</span><span class="p">,</span> +<a id="line-878" name="line-878"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_str_equal</span><span class="p">,</span> +<a id="line-879" name="line-879"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">,</span> +<a id="line-880" name="line-880"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span> +<a id="line-881" name="line-881"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">obj2filename</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hash_table_new_full</span><span class="p">((</span><span class="n">GHashFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_hash</span><span class="p">,</span> +<a id="line-882" name="line-882"></a><span class="w"> </span><span class="p">(</span><span class="n">GEqualFunc</span><span class="p">)</span><span class="w"> </span><span class="n">g_direct_equal</span><span class="p">,</span> +<a id="line-883" name="line-883"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span> +<a id="line-884" name="line-884"></a><span class="w"> </span><span class="p">(</span><span class="n">GDestroyNotify</span><span class="p">)</span><span class="w"> </span><span class="n">g_free</span><span class="p">);</span> +<a id="line-885" name="line-885"></a><span class="w"> </span><span class="n">g_mutex_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths_mutex</span><span class="p">));</span> +<a id="line-886" name="line-886"></a><span class="w"> </span><span class="n">cvs</span><span class="o">-></span><span class="n">emblem_paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span> +<a id="line-887" name="line-887"></a> +<a id="line-888" name="line-888"></a><span class="w"> </span><span class="cm">/* setup the connection obj*/</span> +<a id="line-889" name="line-889"></a><span class="w"> </span><span class="n">dropbox_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span> +<a id="line-890" name="line-890"></a> +<a id="line-891" name="line-891"></a><span class="w"> </span><span class="cm">/* our hooks */</span> +<a id="line-892" name="line-892"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_add</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span><span class="w"> </span><span class="s">"shell_touch"</span><span class="p">,</span> +<a id="line-893" name="line-893"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxUpdateHook</span><span class="p">)</span><span class="w"> </span><span class="n">handle_shell_touch</span><span class="p">,</span><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-894" name="line-894"></a> +<a id="line-895" name="line-895"></a><span class="w"> </span><span class="cm">/* add connection handlers */</span> +<a id="line-896" name="line-896"></a><span class="w"> </span><span class="n">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span> +<a id="line-897" name="line-897"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_connect</span><span class="p">,</span> +<a id="line-898" name="line-898"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-899" name="line-899"></a><span class="w"> </span><span class="n">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">),</span> +<a id="line-900" name="line-900"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxClientConnectHook</span><span class="p">)</span><span class="w"> </span><span class="n">on_disconnect</span><span class="p">,</span> +<a id="line-901" name="line-901"></a><span class="w"> </span><span class="n">cvs</span><span class="p">);</span> +<a id="line-902" name="line-902"></a> +<a id="line-903" name="line-903"></a><span class="w"> </span><span class="cm">/* now start the connection */</span> +<a id="line-904" name="line-904"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"about to start client connection"</span><span class="p">);</span> +<a id="line-905" name="line-905"></a><span class="w"> </span><span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">cvs</span><span class="o">-></span><span class="n">dc</span><span class="p">));</span> +<a id="line-906" name="line-906"></a> +<a id="line-907" name="line-907"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span> +<a id="line-908" name="line-908"></a><span class="p">}</span> +<a id="line-909" name="line-909"></a> +<a id="line-910" name="line-910"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-911" name="line-911"></a><span class="nf">caja_dropbox_class_init</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-912" name="line-912"></a><span class="p">}</span> +<a id="line-913" name="line-913"></a> +<a id="line-914" name="line-914"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-915" name="line-915"></a><span class="nf">caja_dropbox_class_finalize</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="w"> </span><span class="o">*</span><span class="n">class</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-916" name="line-916"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"just checking"</span><span class="p">);</span> +<a id="line-917" name="line-917"></a><span class="w"> </span><span class="cm">/* kill threads here? */</span> +<a id="line-918" name="line-918"></a><span class="p">}</span> +<a id="line-919" name="line-919"></a> +<a id="line-920" name="line-920"></a><span class="n">GType</span> +<a id="line-921" name="line-921"></a><span class="nf">caja_dropbox_get_type</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-922" name="line-922"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">dropbox_type</span><span class="p">;</span> +<a id="line-923" name="line-923"></a><span class="p">}</span> +<a id="line-924" name="line-924"></a> +<a id="line-925" name="line-925"></a><span class="kt">void</span> +<a id="line-926" name="line-926"></a><span class="nf">caja_dropbox_register_type</span><span class="w"> </span><span class="p">(</span><span class="n">GTypeModule</span><span class="w"> </span><span class="o">*</span><span class="n">module</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-927" name="line-927"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GTypeInfo</span><span class="w"> </span><span class="n">info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> +<a id="line-928" name="line-928"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropboxClass</span><span class="p">),</span> +<a id="line-929" name="line-929"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseInitFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span> +<a id="line-930" name="line-930"></a><span class="w"> </span><span class="p">(</span><span class="n">GBaseFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span> +<a id="line-931" name="line-931"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_init</span><span class="p">,</span> +<a id="line-932" name="line-932"></a><span class="w"> </span><span class="p">(</span><span class="n">GClassFinalizeFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_class_finalize</span><span class="p">,</span> +<a id="line-933" name="line-933"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span> +<a id="line-934" name="line-934"></a><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">CajaDropbox</span><span class="p">),</span> +<a id="line-935" name="line-935"></a><span class="w"> </span><span class="mi">0</span><span class="p">,</span> +<a id="line-936" name="line-936"></a><span class="w"> </span><span class="p">(</span><span class="n">GInstanceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_instance_init</span><span class="p">,</span> +<a id="line-937" name="line-937"></a><span class="w"> </span><span class="nb">NULL</span> +<a id="line-938" name="line-938"></a><span class="w"> </span><span class="p">};</span> +<a id="line-939" name="line-939"></a> +<a id="line-940" name="line-940"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">menu_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> +<a id="line-941" name="line-941"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_menu_provider_iface_init</span><span class="p">,</span> +<a id="line-942" name="line-942"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span> +<a id="line-943" name="line-943"></a><span class="w"> </span><span class="nb">NULL</span> +<a id="line-944" name="line-944"></a><span class="w"> </span><span class="p">};</span> +<a id="line-945" name="line-945"></a> +<a id="line-946" name="line-946"></a><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">GInterfaceInfo</span><span class="w"> </span><span class="n">info_provider_iface_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> +<a id="line-947" name="line-947"></a><span class="w"> </span><span class="p">(</span><span class="n">GInterfaceInitFunc</span><span class="p">)</span><span class="w"> </span><span class="n">caja_dropbox_info_provider_iface_init</span><span class="p">,</span> +<a id="line-948" name="line-948"></a><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span> +<a id="line-949" name="line-949"></a><span class="w"> </span><span class="nb">NULL</span> +<a id="line-950" name="line-950"></a><span class="w"> </span><span class="p">};</span> +<a id="line-951" name="line-951"></a> +<a id="line-952" name="line-952"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="w"> </span><span class="o">=</span> +<a id="line-953" name="line-953"></a><span class="w"> </span><span class="n">g_type_module_register_type</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a id="line-954" name="line-954"></a><span class="w"> </span><span class="n">G_TYPE_OBJECT</span><span class="p">,</span> +<a id="line-955" name="line-955"></a><span class="w"> </span><span class="s">"CajaDropbox"</span><span class="p">,</span> +<a id="line-956" name="line-956"></a><span class="w"> </span><span class="o">&</span><span class="n">info</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span> +<a id="line-957" name="line-957"></a> +<a id="line-958" name="line-958"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a id="line-959" name="line-959"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span> +<a id="line-960" name="line-960"></a><span class="w"> </span><span class="n">CAJA_TYPE_MENU_PROVIDER</span><span class="p">,</span> +<a id="line-961" name="line-961"></a><span class="w"> </span><span class="o">&</span><span class="n">menu_provider_iface_info</span><span class="p">);</span> +<a id="line-962" name="line-962"></a> +<a id="line-963" name="line-963"></a><span class="w"> </span><span class="n">g_type_module_add_interface</span><span class="w"> </span><span class="p">(</span><span class="n">module</span><span class="p">,</span> +<a id="line-964" name="line-964"></a><span class="w"> </span><span class="n">dropbox_type</span><span class="p">,</span> +<a id="line-965" name="line-965"></a><span class="w"> </span><span class="n">CAJA_TYPE_INFO_PROVIDER</span><span class="p">,</span> +<a id="line-966" name="line-966"></a><span class="w"> </span><span class="o">&</span><span class="n">info_provider_iface_info</span><span class="p">);</span> +<a id="line-967" name="line-967"></a><span class="p">}</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/6.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/6.html new file mode 100644 index 0000000..dad17e8 --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/6.html @@ -0,0 +1,463 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/dropbox-command-client.h</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> dropbox-command-client.h</p> +<a href="6.html#line-27"> missingIncludeSystem 27</a><a href="6.html#line-28"> missingIncludeSystem 28</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * dropbox-command-client.h</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Header file for caja-dropbox-command.c</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifndef DROPBOX_COMMAND_CLIENT_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#define DROPBOX_COMMAND_CLIENT_H</span> +<a id="line-26" name="line-26"></a> +<a id="line-27" name="line-27"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="error2"><--- Include file: <libcaja-extension/caja-info-provider.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-28" name="line-28"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-file-info.h></span><span class="error2"><--- Include file: <libcaja-extension/caja-file-info.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-29" name="line-29"></a> +<a id="line-30" name="line-30"></a><span class="n">G_BEGIN_DECLS</span> +<a id="line-31" name="line-31"></a> +<a id="line-32" name="line-32"></a><span class="cm">/* command structs */</span> +<a id="line-33" name="line-33"></a><span class="k">typedef</span><span class="w"> </span><span class="k">enum</span><span class="w"> </span><span class="p">{</span><span class="n">GET_FILE_INFO</span><span class="p">,</span><span class="w"> </span><span class="n">GENERAL_COMMAND</span><span class="p">}</span><span class="w"> </span><span class="n">CajaDropboxRequestType</span><span class="p">;</span> +<a id="line-34" name="line-34"></a> +<a id="line-35" name="line-35"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-36" name="line-36"></a><span class="w"> </span><span class="n">CajaDropboxRequestType</span><span class="w"> </span><span class="n">request_type</span><span class="p">;</span> +<a id="line-37" name="line-37"></a><span class="p">}</span><span class="w"> </span><span class="n">DropboxCommand</span><span class="p">;</span> +<a id="line-38" name="line-38"></a> +<a id="line-39" name="line-39"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-40" name="line-40"></a><span class="w"> </span><span class="n">DropboxCommand</span><span class="w"> </span><span class="n">dc</span><span class="p">;</span> +<a id="line-41" name="line-41"></a><span class="w"> </span><span class="n">CajaInfoProvider</span><span class="w"> </span><span class="o">*</span><span class="n">provider</span><span class="p">;</span> +<a id="line-42" name="line-42"></a><span class="w"> </span><span class="n">GClosure</span><span class="w"> </span><span class="o">*</span><span class="n">update_complete</span><span class="p">;</span> +<a id="line-43" name="line-43"></a><span class="w"> </span><span class="n">CajaFileInfo</span><span class="w"> </span><span class="o">*</span><span class="n">file</span><span class="p">;</span> +<a id="line-44" name="line-44"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">cancelled</span><span class="p">;</span> +<a id="line-45" name="line-45"></a><span class="p">}</span><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="p">;</span> +<a id="line-46" name="line-46"></a> +<a id="line-47" name="line-47"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-48" name="line-48"></a><span class="w"> </span><span class="n">DropboxFileInfoCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dfic</span><span class="p">;</span> +<a id="line-49" name="line-49"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">file_status_response</span><span class="p">;</span> +<a id="line-50" name="line-50"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">folder_tag_response</span><span class="p">;</span> +<a id="line-51" name="line-51"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">emblems_response</span><span class="p">;</span> +<a id="line-52" name="line-52"></a><span class="p">}</span><span class="w"> </span><span class="n">DropboxFileInfoCommandResponse</span><span class="p">;</span> +<a id="line-53" name="line-53"></a> +<a id="line-54" name="line-54"></a><span class="k">typedef</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">CajaDropboxCommandResponseHandler</span><span class="p">)(</span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="p">);</span> +<a id="line-55" name="line-55"></a> +<a id="line-56" name="line-56"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-57" name="line-57"></a><span class="w"> </span><span class="n">DropboxCommand</span><span class="w"> </span><span class="n">dc</span><span class="p">;</span> +<a id="line-58" name="line-58"></a><span class="w"> </span><span class="n">gchar</span><span class="w"> </span><span class="o">*</span><span class="n">command_name</span><span class="p">;</span> +<a id="line-59" name="line-59"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">command_args</span><span class="p">;</span> +<a id="line-60" name="line-60"></a><span class="w"> </span><span class="n">CajaDropboxCommandResponseHandler</span><span class="w"> </span><span class="n">handler</span><span class="p">;</span> +<a id="line-61" name="line-61"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">handler_ud</span><span class="p">;</span> +<a id="line-62" name="line-62"></a><span class="p">}</span><span class="w"> </span><span class="n">DropboxGeneralCommand</span><span class="p">;</span> +<a id="line-63" name="line-63"></a> +<a id="line-64" name="line-64"></a><span class="k">typedef</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">DropboxCommandClientConnectionAttemptHook</span><span class="p">)(</span><span class="n">guint</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="p">);</span> +<a id="line-65" name="line-65"></a><span class="k">typedef</span><span class="w"> </span><span class="n">GHookFunc</span><span class="w"> </span><span class="n">DropboxCommandClientConnectHook</span><span class="p">;</span> +<a id="line-66" name="line-66"></a> +<a id="line-67" name="line-67"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-68" name="line-68"></a><span class="w"> </span><span class="n">GMutex</span><span class="w"> </span><span class="n">command_connected_mutex</span><span class="p">;</span> +<a id="line-69" name="line-69"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">command_connected</span><span class="p">;</span> +<a id="line-70" name="line-70"></a><span class="w"> </span><span class="n">GAsyncQueue</span><span class="w"> </span><span class="o">*</span><span class="n">command_queue</span><span class="p">;</span> +<a id="line-71" name="line-71"></a><span class="w"> </span><span class="n">GList</span><span class="w"> </span><span class="o">*</span><span class="n">ca_hooklist</span><span class="p">;</span> +<a id="line-72" name="line-72"></a><span class="w"> </span><span class="n">GHookList</span><span class="w"> </span><span class="n">onconnect_hooklist</span><span class="p">;</span> +<a id="line-73" name="line-73"></a><span class="w"> </span><span class="n">GHookList</span><span class="w"> </span><span class="n">ondisconnect_hooklist</span><span class="p">;</span> +<a id="line-74" name="line-74"></a><span class="p">}</span><span class="w"> </span><span class="n">DropboxCommandClient</span><span class="p">;</span> +<a id="line-75" name="line-75"></a> +<a id="line-76" name="line-76"></a><span class="n">gboolean</span><span class="w"> </span><span class="nf">dropbox_command_client_is_connected</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">);</span> +<a id="line-77" name="line-77"></a> +<a id="line-78" name="line-78"></a><span class="kt">void</span><span class="w"> </span><span class="nf">dropbox_command_client_force_reconnect</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">);</span> +<a id="line-79" name="line-79"></a> +<a id="line-80" name="line-80"></a><span class="kt">void</span> +<a id="line-81" name="line-81"></a><span class="nf">dropbox_command_client_request</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span><span class="w"> </span><span class="n">DropboxCommand</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">);</span> +<a id="line-82" name="line-82"></a> +<a id="line-83" name="line-83"></a><span class="kt">void</span> +<a id="line-84" name="line-84"></a><span class="nf">dropbox_command_client_setup</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">);</span> +<a id="line-85" name="line-85"></a> +<a id="line-86" name="line-86"></a><span class="kt">void</span> +<a id="line-87" name="line-87"></a><span class="nf">dropbox_command_client_start</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">);</span> +<a id="line-88" name="line-88"></a> +<a id="line-89" name="line-89"></a><span class="kt">void</span><span class="w"> </span><span class="nf">dropbox_command_client_send_simple_command</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span> +<a id="line-90" name="line-90"></a><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">command</span><span class="p">);</span> +<a id="line-91" name="line-91"></a> +<a id="line-92" name="line-92"></a><span class="kt">void</span><span class="w"> </span><span class="nf">dropbox_command_client_send_command</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span> +<a id="line-93" name="line-93"></a><span class="w"> </span><span class="n">CajaDropboxCommandResponseHandler</span><span class="w"> </span><span class="n">h</span><span class="p">,</span> +<a id="line-94" name="line-94"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">,</span> +<a id="line-95" name="line-95"></a><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">command</span><span class="p">,</span><span class="w"> </span><span class="p">...);</span> +<a id="line-96" name="line-96"></a><span class="kt">void</span> +<a id="line-97" name="line-97"></a><span class="nf">dropbox_command_client_add_on_connect_hook</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span> +<a id="line-98" name="line-98"></a><span class="w"> </span><span class="n">DropboxCommandClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-99" name="line-99"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">);</span> +<a id="line-100" name="line-100"></a> +<a id="line-101" name="line-101"></a><span class="kt">void</span> +<a id="line-102" name="line-102"></a><span class="nf">dropbox_command_client_add_on_disconnect_hook</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span> +<a id="line-103" name="line-103"></a><span class="w"> </span><span class="n">DropboxCommandClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-104" name="line-104"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">);</span> +<a id="line-105" name="line-105"></a> +<a id="line-106" name="line-106"></a><span class="kt">void</span> +<a id="line-107" name="line-107"></a><span class="nf">dropbox_command_client_add_connection_attempt_hook</span><span class="p">(</span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="o">*</span><span class="n">dcc</span><span class="p">,</span> +<a id="line-108" name="line-108"></a><span class="w"> </span><span class="n">DropboxCommandClientConnectionAttemptHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-109" name="line-109"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">);</span> +<a id="line-110" name="line-110"></a> +<a id="line-111" name="line-111"></a><span class="n">G_END_DECLS</span> +<a id="line-112" name="line-112"></a> +<a id="line-113" name="line-113"></a><span class="cp">#endif</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/7.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/7.html new file mode 100644 index 0000000..4730b8e --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/7.html @@ -0,0 +1,373 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/caja-dropbox.h</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> caja-dropbox.h</p> +<a href="7.html#line-27"> missingIncludeSystem 27</a><a href="7.html#line-28"> missingIncludeSystem 28</a><a href="7.html#line-30"> missingIncludeSystem 30</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal">10</span> +<span class="normal">11</span> +<span class="normal">12</span> +<span class="normal">13</span> +<span class="normal">14</span> +<span class="normal">15</span> +<span class="normal">16</span> +<span class="normal">17</span> +<span class="normal">18</span> +<span class="normal">19</span> +<span class="normal">20</span> +<span class="normal">21</span> +<span class="normal">22</span> +<span class="normal">23</span> +<span class="normal">24</span> +<span class="normal">25</span> +<span class="normal">26</span> +<span class="normal">27</span> +<span class="normal">28</span> +<span class="normal">29</span> +<span class="normal">30</span> +<span class="normal">31</span> +<span class="normal">32</span> +<span class="normal">33</span> +<span class="normal">34</span> +<span class="normal">35</span> +<span class="normal">36</span> +<span class="normal">37</span> +<span class="normal">38</span> +<span class="normal">39</span> +<span class="normal">40</span> +<span class="normal">41</span> +<span class="normal">42</span> +<span class="normal">43</span> +<span class="normal">44</span> +<span class="normal">45</span> +<span class="normal">46</span> +<span class="normal">47</span> +<span class="normal">48</span> +<span class="normal">49</span> +<span class="normal">50</span> +<span class="normal">51</span> +<span class="normal">52</span> +<span class="normal">53</span> +<span class="normal">54</span> +<span class="normal">55</span> +<span class="normal">56</span> +<span class="normal">57</span> +<span class="normal">58</span> +<span class="normal">59</span> +<span class="normal">60</span> +<span class="normal">61</span> +<span class="normal">62</span> +<span class="normal">63</span> +<span class="normal">64</span> +<span class="normal">65</span> +<span class="normal">66</span> +<span class="normal">67</span> +<span class="normal">68</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * caja-dropbox.h</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Header file for caja-dropbox.c</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifndef CAJA_DROPBOX_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#define CAJA_DROPBOX_H</span> +<a id="line-26" name="line-26"></a> +<a id="line-27" name="line-27"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="error2"><--- Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-28" name="line-28"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib-object.h></span><span class="error2"><--- Include file: <glib-object.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-29" name="line-29"></a> +<a id="line-30" name="line-30"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><libcaja-extension/caja-info-provider.h></span><span class="error2"><--- Include file: <libcaja-extension/caja-info-provider.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-31" name="line-31"></a> +<a id="line-32" name="line-32"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-command-client.h"</span> +<a id="line-33" name="line-33"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span> +<a id="line-34" name="line-34"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-client.h"</span> +<a id="line-35" name="line-35"></a> +<a id="line-36" name="line-36"></a><span class="n">G_BEGIN_DECLS</span> +<a id="line-37" name="line-37"></a> +<a id="line-38" name="line-38"></a><span class="cm">/* Declarations for the dropbox extension object. This object will be</span> +<a id="line-39" name="line-39"></a><span class="cm"> * instantiated by caja. It implements the GInterfaces</span> +<a id="line-40" name="line-40"></a><span class="cm"> * exported by libcaja. */</span> +<a id="line-41" name="line-41"></a> +<a id="line-42" name="line-42"></a><span class="cp">#define CAJA_TYPE_DROPBOX (caja_dropbox_get_type ())</span> +<a id="line-43" name="line-43"></a><span class="cp">#define CAJA_DROPBOX(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CAJA_TYPE_DROPBOX, CajaDropbox))</span> +<a id="line-44" name="line-44"></a><span class="cp">#define CAJA_IS_DROPBOX(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CAJA_TYPE_DROPBOX))</span> +<a id="line-45" name="line-45"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">_CajaDropbox</span><span class="w"> </span><span class="n">CajaDropbox</span><span class="p">;</span> +<a id="line-46" name="line-46"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">_CajaDropboxClass</span><span class="w"> </span><span class="n">CajaDropboxClass</span><span class="p">;</span> +<a id="line-47" name="line-47"></a> +<a id="line-48" name="line-48"></a><span class="k">struct</span><span class="w"> </span><span class="nc">_CajaDropbox</span><span class="w"> </span><span class="p">{</span> +<a id="line-49" name="line-49"></a><span class="w"> </span><span class="n">GObject</span><span class="w"> </span><span class="n">parent_slot</span><span class="p">;</span> +<a id="line-50" name="line-50"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">filename2obj</span><span class="p">;</span> +<a id="line-51" name="line-51"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">obj2filename</span><span class="p">;</span> +<a id="line-52" name="line-52"></a><span class="w"> </span><span class="n">GMutex</span><span class="w"> </span><span class="n">emblem_paths_mutex</span><span class="p">;</span> +<a id="line-53" name="line-53"></a><span class="w"> </span><span class="n">GHashTable</span><span class="w"> </span><span class="o">*</span><span class="n">emblem_paths</span><span class="p">;</span> +<a id="line-54" name="line-54"></a><span class="w"> </span><span class="n">DropboxClient</span><span class="w"> </span><span class="n">dc</span><span class="p">;</span> +<a id="line-55" name="line-55"></a><span class="p">};</span> +<a id="line-56" name="line-56"></a> +<a id="line-57" name="line-57"></a><span class="k">struct</span><span class="w"> </span><span class="nc">_CajaDropboxClass</span><span class="w"> </span><span class="p">{</span> +<a id="line-58" name="line-58"></a><span class="w"> </span><span class="n">GObjectClass</span><span class="w"> </span><span class="n">parent_slot</span><span class="p">;</span> +<a id="line-59" name="line-59"></a><span class="p">};</span> +<a id="line-60" name="line-60"></a> +<a id="line-61" name="line-61"></a><span class="n">GType</span><span class="w"> </span><span class="nf">caja_dropbox_get_type</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span> +<a id="line-62" name="line-62"></a><span class="kt">void</span><span class="w"> </span><span class="nf">caja_dropbox_register_type</span><span class="p">(</span><span class="n">GTypeModule</span><span class="w"> </span><span class="o">*</span><span class="n">module</span><span class="p">);</span> +<a id="line-63" name="line-63"></a> +<a id="line-64" name="line-64"></a><span class="k">extern</span><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">dropbox_use_operation_in_progress_workaround</span><span class="p">;</span> +<a id="line-65" name="line-65"></a> +<a id="line-66" name="line-66"></a><span class="n">G_END_DECLS</span> +<a id="line-67" name="line-67"></a> +<a id="line-68" name="line-68"></a><span class="cp">#endif</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/8.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/8.html new file mode 100644 index 0000000..52dd132 --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/8.html @@ -0,0 +1,389 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/dropbox-client.h</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> dropbox-client.h</p> +<a href="8.html#line-27"> missingIncludeSystem 27</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal">10</span> +<span class="normal">11</span> +<span class="normal">12</span> +<span class="normal">13</span> +<span class="normal">14</span> +<span class="normal">15</span> +<span class="normal">16</span> +<span class="normal">17</span> +<span class="normal">18</span> +<span class="normal">19</span> +<span class="normal">20</span> +<span class="normal">21</span> +<span class="normal">22</span> +<span class="normal">23</span> +<span class="normal">24</span> +<span class="normal">25</span> +<span class="normal">26</span> +<span class="normal">27</span> +<span class="normal">28</span> +<span class="normal">29</span> +<span class="normal">30</span> +<span class="normal">31</span> +<span class="normal">32</span> +<span class="normal">33</span> +<span class="normal">34</span> +<span class="normal">35</span> +<span class="normal">36</span> +<span class="normal">37</span> +<span class="normal">38</span> +<span class="normal">39</span> +<span class="normal">40</span> +<span class="normal">41</span> +<span class="normal">42</span> +<span class="normal">43</span> +<span class="normal">44</span> +<span class="normal">45</span> +<span class="normal">46</span> +<span class="normal">47</span> +<span class="normal">48</span> +<span class="normal">49</span> +<span class="normal">50</span> +<span class="normal">51</span> +<span class="normal">52</span> +<span class="normal">53</span> +<span class="normal">54</span> +<span class="normal">55</span> +<span class="normal">56</span> +<span class="normal">57</span> +<span class="normal">58</span> +<span class="normal">59</span> +<span class="normal">60</span> +<span class="normal">61</span> +<span class="normal">62</span> +<span class="normal">63</span> +<span class="normal">64</span> +<span class="normal">65</span> +<span class="normal">66</span> +<span class="normal">67</span> +<span class="normal">68</span> +<span class="normal">69</span> +<span class="normal">70</span> +<span class="normal">71</span> +<span class="normal">72</span> +<span class="normal">73</span> +<span class="normal">74</span> +<span class="normal">75</span> +<span class="normal">76</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * dropbox-client.h</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Header file for dropbox-client.c</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="cp">#ifndef DROPBOX_CLIENT_H</span> +<a id="line-25" name="line-25"></a><span class="cp">#define DROPBOX_CLIENT_H</span> +<a id="line-26" name="line-26"></a> +<a id="line-27" name="line-27"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="error2"><--- Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-28" name="line-28"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-command-client.h"</span> +<a id="line-29" name="line-29"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span> +<a id="line-30" name="line-30"></a> +<a id="line-31" name="line-31"></a><span class="n">G_BEGIN_DECLS</span> +<a id="line-32" name="line-32"></a> +<a id="line-33" name="line-33"></a><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span> +<a id="line-34" name="line-34"></a><span class="w"> </span><span class="n">DropboxCommandClient</span><span class="w"> </span><span class="n">dcc</span><span class="p">;</span> +<a id="line-35" name="line-35"></a><span class="w"> </span><span class="n">CajaDropboxHookserv</span><span class="w"> </span><span class="n">hookserv</span><span class="p">;</span> +<a id="line-36" name="line-36"></a><span class="w"> </span><span class="n">GHookList</span><span class="w"> </span><span class="n">onconnect_hooklist</span><span class="p">;</span> +<a id="line-37" name="line-37"></a><span class="w"> </span><span class="n">GHookList</span><span class="w"> </span><span class="n">ondisconnect_hooklist</span><span class="p">;</span> +<a id="line-38" name="line-38"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">hook_connect_called</span><span class="p">;</span> +<a id="line-39" name="line-39"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">command_connect_called</span><span class="p">;</span> +<a id="line-40" name="line-40"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">hook_disconnect_called</span><span class="p">;</span> +<a id="line-41" name="line-41"></a><span class="w"> </span><span class="n">gboolean</span><span class="w"> </span><span class="n">command_disconnect_called</span><span class="p">;</span> +<a id="line-42" name="line-42"></a><span class="p">}</span><span class="w"> </span><span class="n">DropboxClient</span><span class="p">;</span> +<a id="line-43" name="line-43"></a> +<a id="line-44" name="line-44"></a><span class="k">typedef</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">DropboxClientConnectionAttemptHook</span><span class="p">)(</span><span class="n">guint</span><span class="p">,</span><span class="w"> </span><span class="n">gpointer</span><span class="p">);</span> +<a id="line-45" name="line-45"></a><span class="k">typedef</span><span class="w"> </span><span class="n">GHookFunc</span><span class="w"> </span><span class="n">DropboxClientConnectHook</span><span class="p">;</span> +<a id="line-46" name="line-46"></a> +<a id="line-47" name="line-47"></a><span class="kt">void</span> +<a id="line-48" name="line-48"></a><span class="nf">dropbox_client_setup</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">);</span> +<a id="line-49" name="line-49"></a> +<a id="line-50" name="line-50"></a><span class="kt">void</span> +<a id="line-51" name="line-51"></a><span class="nf">dropbox_client_start</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">);</span> +<a id="line-52" name="line-52"></a> +<a id="line-53" name="line-53"></a><span class="n">gboolean</span> +<a id="line-54" name="line-54"></a><span class="nf">dropbox_client_is_connected</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">);</span> +<a id="line-55" name="line-55"></a> +<a id="line-56" name="line-56"></a><span class="kt">void</span> +<a id="line-57" name="line-57"></a><span class="nf">dropbox_client_force_reconnect</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">);</span> +<a id="line-58" name="line-58"></a> +<a id="line-59" name="line-59"></a><span class="kt">void</span> +<a id="line-60" name="line-60"></a><span class="nf">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">,</span> +<a id="line-61" name="line-61"></a><span class="w"> </span><span class="n">DropboxClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-62" name="line-62"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">);</span> +<a id="line-63" name="line-63"></a> +<a id="line-64" name="line-64"></a><span class="kt">void</span> +<a id="line-65" name="line-65"></a><span class="nf">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">,</span> +<a id="line-66" name="line-66"></a><span class="w"> </span><span class="n">DropboxClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-67" name="line-67"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">);</span> +<a id="line-68" name="line-68"></a> +<a id="line-69" name="line-69"></a><span class="kt">void</span> +<a id="line-70" name="line-70"></a><span class="nf">dropbox_client_add_connection_attempt_hook</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">,</span> +<a id="line-71" name="line-71"></a><span class="w"> </span><span class="n">DropboxClientConnectionAttemptHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-72" name="line-72"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">);</span> +<a id="line-73" name="line-73"></a> +<a id="line-74" name="line-74"></a><span class="n">G_END_DECLS</span> +<a id="line-75" name="line-75"></a> +<a id="line-76" name="line-76"></a><span class="cp">#endif</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/9.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/9.html new file mode 100644 index 0000000..8b00d3e --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/9.html @@ -0,0 +1,585 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</title> + <link rel="stylesheet" href="style.css"> + <style> +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: src/dropbox-client.c</h1> + + </div> + + <div id="menu"> + <p><a href="index.html">Defects:</a> dropbox-client.c</p> +<a href="9.html#line-24"> missingIncludeSystem 24</a> + </div> + <div id="content"> +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span> +<span class="normal"> 2</span> +<span class="normal"> 3</span> +<span class="normal"> 4</span> +<span class="normal"> 5</span> +<span class="normal"> 6</span> +<span class="normal"> 7</span> +<span class="normal"> 8</span> +<span class="normal"> 9</span> +<span class="normal"> 10</span> +<span class="normal"> 11</span> +<span class="normal"> 12</span> +<span class="normal"> 13</span> +<span class="normal"> 14</span> +<span class="normal"> 15</span> +<span class="normal"> 16</span> +<span class="normal"> 17</span> +<span class="normal"> 18</span> +<span class="normal"> 19</span> +<span class="normal"> 20</span> +<span class="normal"> 21</span> +<span class="normal"> 22</span> +<span class="normal"> 23</span> +<span class="normal"> 24</span> +<span class="normal"> 25</span> +<span class="normal"> 26</span> +<span class="normal"> 27</span> +<span class="normal"> 28</span> +<span class="normal"> 29</span> +<span class="normal"> 30</span> +<span class="normal"> 31</span> +<span class="normal"> 32</span> +<span class="normal"> 33</span> +<span class="normal"> 34</span> +<span class="normal"> 35</span> +<span class="normal"> 36</span> +<span class="normal"> 37</span> +<span class="normal"> 38</span> +<span class="normal"> 39</span> +<span class="normal"> 40</span> +<span class="normal"> 41</span> +<span class="normal"> 42</span> +<span class="normal"> 43</span> +<span class="normal"> 44</span> +<span class="normal"> 45</span> +<span class="normal"> 46</span> +<span class="normal"> 47</span> +<span class="normal"> 48</span> +<span class="normal"> 49</span> +<span class="normal"> 50</span> +<span class="normal"> 51</span> +<span class="normal"> 52</span> +<span class="normal"> 53</span> +<span class="normal"> 54</span> +<span class="normal"> 55</span> +<span class="normal"> 56</span> +<span class="normal"> 57</span> +<span class="normal"> 58</span> +<span class="normal"> 59</span> +<span class="normal"> 60</span> +<span class="normal"> 61</span> +<span class="normal"> 62</span> +<span class="normal"> 63</span> +<span class="normal"> 64</span> +<span class="normal"> 65</span> +<span class="normal"> 66</span> +<span class="normal"> 67</span> +<span class="normal"> 68</span> +<span class="normal"> 69</span> +<span class="normal"> 70</span> +<span class="normal"> 71</span> +<span class="normal"> 72</span> +<span class="normal"> 73</span> +<span class="normal"> 74</span> +<span class="normal"> 75</span> +<span class="normal"> 76</span> +<span class="normal"> 77</span> +<span class="normal"> 78</span> +<span class="normal"> 79</span> +<span class="normal"> 80</span> +<span class="normal"> 81</span> +<span class="normal"> 82</span> +<span class="normal"> 83</span> +<span class="normal"> 84</span> +<span class="normal"> 85</span> +<span class="normal"> 86</span> +<span class="normal"> 87</span> +<span class="normal"> 88</span> +<span class="normal"> 89</span> +<span class="normal"> 90</span> +<span class="normal"> 91</span> +<span class="normal"> 92</span> +<span class="normal"> 93</span> +<span class="normal"> 94</span> +<span class="normal"> 95</span> +<span class="normal"> 96</span> +<span class="normal"> 97</span> +<span class="normal"> 98</span> +<span class="normal"> 99</span> +<span class="normal">100</span> +<span class="normal">101</span> +<span class="normal">102</span> +<span class="normal">103</span> +<span class="normal">104</span> +<span class="normal">105</span> +<span class="normal">106</span> +<span class="normal">107</span> +<span class="normal">108</span> +<span class="normal">109</span> +<span class="normal">110</span> +<span class="normal">111</span> +<span class="normal">112</span> +<span class="normal">113</span> +<span class="normal">114</span> +<span class="normal">115</span> +<span class="normal">116</span> +<span class="normal">117</span> +<span class="normal">118</span> +<span class="normal">119</span> +<span class="normal">120</span> +<span class="normal">121</span> +<span class="normal">122</span> +<span class="normal">123</span> +<span class="normal">124</span> +<span class="normal">125</span> +<span class="normal">126</span> +<span class="normal">127</span> +<span class="normal">128</span> +<span class="normal">129</span> +<span class="normal">130</span> +<span class="normal">131</span> +<span class="normal">132</span> +<span class="normal">133</span> +<span class="normal">134</span> +<span class="normal">135</span> +<span class="normal">136</span> +<span class="normal">137</span> +<span class="normal">138</span> +<span class="normal">139</span> +<span class="normal">140</span> +<span class="normal">141</span> +<span class="normal">142</span> +<span class="normal">143</span> +<span class="normal">144</span> +<span class="normal">145</span> +<span class="normal">146</span> +<span class="normal">147</span> +<span class="normal">148</span> +<span class="normal">149</span> +<span class="normal">150</span> +<span class="normal">151</span> +<span class="normal">152</span> +<span class="normal">153</span> +<span class="normal">154</span> +<span class="normal">155</span> +<span class="normal">156</span> +<span class="normal">157</span> +<span class="normal">158</span> +<span class="normal">159</span> +<span class="normal">160</span> +<span class="normal">161</span> +<span class="normal">162</span> +<span class="normal">163</span> +<span class="normal">164</span> +<span class="normal">165</span> +<span class="normal">166</span> +<span class="normal">167</span> +<span class="normal">168</span> +<span class="normal">169</span> +<span class="normal">170</span> +<span class="normal">171</span> +<span class="normal">172</span> +<span class="normal">173</span> +<span class="normal">174</span></pre></div></td><td class="code"><div><pre><span></span><a id="line-1" name="line-1"></a><span class="cm">/*</span> +<a id="line-2" name="line-2"></a><span class="cm"> * Copyright 2008 Evenflow, Inc.</span> +<a id="line-3" name="line-3"></a><span class="cm"> *</span> +<a id="line-4" name="line-4"></a><span class="cm"> * dropbox-client.c</span> +<a id="line-5" name="line-5"></a><span class="cm"> * Implements connection handling and C interface for interfacing with the Dropbox daemon.</span> +<a id="line-6" name="line-6"></a><span class="cm"> *</span> +<a id="line-7" name="line-7"></a><span class="cm"> * This file is part of caja-dropbox.</span> +<a id="line-8" name="line-8"></a><span class="cm"> *</span> +<a id="line-9" name="line-9"></a><span class="cm"> * caja-dropbox is free software: you can redistribute it and/or modify</span> +<a id="line-10" name="line-10"></a><span class="cm"> * it under the terms of the GNU General Public License as published by</span> +<a id="line-11" name="line-11"></a><span class="cm"> * the Free Software Foundation, either version 3 of the License, or</span> +<a id="line-12" name="line-12"></a><span class="cm"> * (at your option) any later version.</span> +<a id="line-13" name="line-13"></a><span class="cm"> *</span> +<a id="line-14" name="line-14"></a><span class="cm"> * caja-dropbox is distributed in the hope that it will be useful,</span> +<a id="line-15" name="line-15"></a><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a id="line-16" name="line-16"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a id="line-17" name="line-17"></a><span class="cm"> * GNU General Public License for more details.</span> +<a id="line-18" name="line-18"></a><span class="cm"> *</span> +<a id="line-19" name="line-19"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a id="line-20" name="line-20"></a><span class="cm"> * along with caja-dropbox. If not, see <http://www.gnu.org/licenses/>.</span> +<a id="line-21" name="line-21"></a><span class="cm"> *</span> +<a id="line-22" name="line-22"></a><span class="cm"> */</span> +<a id="line-23" name="line-23"></a> +<a id="line-24" name="line-24"></a><span class="hll"><span class="cp">#include</span><span class="w"> </span><span class="cpf"><glib.h></span><span class="error2"><--- Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</span> +</span><a id="line-25" name="line-25"></a> +<a id="line-26" name="line-26"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"g-util.h"</span> +<a id="line-27" name="line-27"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-command-client.h"</span> +<a id="line-28" name="line-28"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"caja-dropbox-hooks.h"</span> +<a id="line-29" name="line-29"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">"dropbox-client.h"</span> +<a id="line-30" name="line-30"></a> +<a id="line-31" name="line-31"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-32" name="line-32"></a><span class="nf">hook_on_connect</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-33" name="line-33"></a><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">hook_connect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-34" name="line-34"></a> +<a id="line-35" name="line-35"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">command_connect_called</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-36" name="line-36"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"client connection"</span><span class="p">);</span> +<a id="line-37" name="line-37"></a><span class="w"> </span><span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span> +<a id="line-38" name="line-38"></a><span class="w"> </span><span class="cm">/* reset flags */</span> +<a id="line-39" name="line-39"></a><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">hook_connect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">command_connect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-40" name="line-40"></a><span class="w"> </span><span class="p">}</span> +<a id="line-41" name="line-41"></a><span class="p">}</span> +<a id="line-42" name="line-42"></a> +<a id="line-43" name="line-43"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-44" name="line-44"></a><span class="nf">command_on_connect</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-45" name="line-45"></a><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">command_connect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-46" name="line-46"></a> +<a id="line-47" name="line-47"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">hook_connect_called</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-48" name="line-48"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"client connection"</span><span class="p">);</span> +<a id="line-49" name="line-49"></a><span class="w"> </span><span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span> +<a id="line-50" name="line-50"></a><span class="w"> </span><span class="cm">/* reset flags */</span> +<a id="line-51" name="line-51"></a><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">hook_connect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">command_connect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-52" name="line-52"></a><span class="w"> </span><span class="p">}</span> +<a id="line-53" name="line-53"></a><span class="p">}</span> +<a id="line-54" name="line-54"></a> +<a id="line-55" name="line-55"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-56" name="line-56"></a><span class="nf">command_on_disconnect</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-57" name="line-57"></a><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">command_disconnect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-58" name="line-58"></a> +<a id="line-59" name="line-59"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">hook_disconnect_called</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-60" name="line-60"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"client disconnect"</span><span class="p">);</span> +<a id="line-61" name="line-61"></a><span class="w"> </span><span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span> +<a id="line-62" name="line-62"></a><span class="w"> </span><span class="cm">/* reset flags */</span> +<a id="line-63" name="line-63"></a><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">hook_disconnect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">command_disconnect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-64" name="line-64"></a><span class="w"> </span><span class="p">}</span> +<a id="line-65" name="line-65"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-66" name="line-66"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_force_reconnect</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">hookserv</span><span class="p">));</span> +<a id="line-67" name="line-67"></a><span class="w"> </span><span class="p">}</span> +<a id="line-68" name="line-68"></a><span class="p">}</span> +<a id="line-69" name="line-69"></a> +<a id="line-70" name="line-70"></a><span class="k">static</span><span class="w"> </span><span class="kt">void</span> +<a id="line-71" name="line-71"></a><span class="nf">hook_on_disconnect</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-72" name="line-72"></a><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">hook_disconnect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TRUE</span><span class="p">;</span> +<a id="line-73" name="line-73"></a> +<a id="line-74" name="line-74"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">command_disconnect_called</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-75" name="line-75"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"client disconnect"</span><span class="p">);</span> +<a id="line-76" name="line-76"></a><span class="w"> </span><span class="n">g_hook_list_invoke</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">FALSE</span><span class="p">);</span> +<a id="line-77" name="line-77"></a><span class="w"> </span><span class="cm">/* reset flags */</span> +<a id="line-78" name="line-78"></a><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">hook_disconnect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">command_disconnect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-79" name="line-79"></a><span class="w"> </span><span class="p">}</span> +<a id="line-80" name="line-80"></a><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span> +<a id="line-81" name="line-81"></a><span class="w"> </span><span class="n">dropbox_command_client_force_reconnect</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">dcc</span><span class="p">));</span> +<a id="line-82" name="line-82"></a><span class="w"> </span><span class="p">}</span> +<a id="line-83" name="line-83"></a><span class="p">}</span> +<a id="line-84" name="line-84"></a> +<a id="line-85" name="line-85"></a><span class="n">gboolean</span> +<a id="line-86" name="line-86"></a><span class="nf">dropbox_client_is_connected</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-87" name="line-87"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">dropbox_command_client_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">dcc</span><span class="p">))</span><span class="w"> </span><span class="o">&&</span> +<a id="line-88" name="line-88"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_is_connected</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">hookserv</span><span class="p">)));</span> +<a id="line-89" name="line-89"></a><span class="p">}</span> +<a id="line-90" name="line-90"></a> +<a id="line-91" name="line-91"></a><span class="kt">void</span> +<a id="line-92" name="line-92"></a><span class="nf">dropbox_client_force_reconnect</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-93" name="line-93"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dropbox_client_is_connected</span><span class="p">(</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">TRUE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-94" name="line-94"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"forcing client to reconnect"</span><span class="p">);</span> +<a id="line-95" name="line-95"></a><span class="w"> </span><span class="n">dropbox_command_client_force_reconnect</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">dcc</span><span class="p">));</span> +<a id="line-96" name="line-96"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_force_reconnect</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">hookserv</span><span class="p">));</span> +<a id="line-97" name="line-97"></a><span class="w"> </span><span class="p">}</span> +<a id="line-98" name="line-98"></a><span class="p">}</span> +<a id="line-99" name="line-99"></a> +<a id="line-100" name="line-100"></a><span class="cm">/* should only be called once on initialization */</span> +<a id="line-101" name="line-101"></a><span class="kt">void</span> +<a id="line-102" name="line-102"></a><span class="nf">dropbox_client_setup</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-103" name="line-103"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">hookserv</span><span class="p">));</span> +<a id="line-104" name="line-104"></a><span class="w"> </span><span class="n">dropbox_command_client_setup</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">dcc</span><span class="p">));</span> +<a id="line-105" name="line-105"></a> +<a id="line-106" name="line-106"></a><span class="w"> </span><span class="n">g_hook_list_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">GHook</span><span class="p">));</span> +<a id="line-107" name="line-107"></a><span class="w"> </span><span class="n">g_hook_list_init</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">GHook</span><span class="p">));</span> +<a id="line-108" name="line-108"></a> +<a id="line-109" name="line-109"></a><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">hook_disconnect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">command_disconnect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-110" name="line-110"></a><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">hook_connect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dc</span><span class="o">-></span><span class="n">command_connect_called</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FALSE</span><span class="p">;</span> +<a id="line-111" name="line-111"></a> +<a id="line-112" name="line-112"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">hookserv</span><span class="p">),</span> +<a id="line-113" name="line-113"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxHookClientConnectHook</span><span class="p">)</span> +<a id="line-114" name="line-114"></a><span class="w"> </span><span class="n">hook_on_connect</span><span class="p">,</span><span class="w"> </span><span class="n">dc</span><span class="p">);</span> +<a id="line-115" name="line-115"></a> +<a id="line-116" name="line-116"></a><span class="w"> </span><span class="n">dropbox_command_client_add_on_connect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">dcc</span><span class="p">),</span> +<a id="line-117" name="line-117"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommandClientConnectHook</span><span class="p">)</span> +<a id="line-118" name="line-118"></a><span class="w"> </span><span class="n">command_on_connect</span><span class="p">,</span><span class="w"> </span><span class="n">dc</span><span class="p">);</span> +<a id="line-119" name="line-119"></a> +<a id="line-120" name="line-120"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">hookserv</span><span class="p">),</span> +<a id="line-121" name="line-121"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxHookClientConnectHook</span><span class="p">)</span> +<a id="line-122" name="line-122"></a><span class="w"> </span><span class="n">hook_on_disconnect</span><span class="p">,</span><span class="w"> </span><span class="n">dc</span><span class="p">);</span> +<a id="line-123" name="line-123"></a> +<a id="line-124" name="line-124"></a><span class="w"> </span><span class="n">dropbox_command_client_add_on_disconnect_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">dcc</span><span class="p">),</span> +<a id="line-125" name="line-125"></a><span class="w"> </span><span class="p">(</span><span class="n">DropboxCommandClientConnectHook</span><span class="p">)</span> +<a id="line-126" name="line-126"></a><span class="w"> </span><span class="n">command_on_disconnect</span><span class="p">,</span><span class="w"> </span><span class="n">dc</span><span class="p">);</span> +<a id="line-127" name="line-127"></a><span class="p">}</span> +<a id="line-128" name="line-128"></a> +<a id="line-129" name="line-129"></a><span class="cm">/* not thread safe */</span> +<a id="line-130" name="line-130"></a><span class="kt">void</span> +<a id="line-131" name="line-131"></a><span class="nf">dropbox_client_add_on_disconnect_hook</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">,</span> +<a id="line-132" name="line-132"></a><span class="w"> </span><span class="n">DropboxClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-133" name="line-133"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-134" name="line-134"></a><span class="w"> </span><span class="n">GHook</span><span class="w"> </span><span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a id="line-135" name="line-135"></a> +<a id="line-136" name="line-136"></a><span class="w"> </span><span class="n">newhook</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hook_alloc</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">));</span> +<a id="line-137" name="line-137"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dhcch</span><span class="p">;</span> +<a id="line-138" name="line-138"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-139" name="line-139"></a> +<a id="line-140" name="line-140"></a><span class="w"> </span><span class="n">g_hook_append</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">ondisconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">newhook</span><span class="p">);</span> +<a id="line-141" name="line-141"></a><span class="p">}</span> +<a id="line-142" name="line-142"></a> +<a id="line-143" name="line-143"></a><span class="cm">/* not thread safe */</span> +<a id="line-144" name="line-144"></a><span class="kt">void</span> +<a id="line-145" name="line-145"></a><span class="nf">dropbox_client_add_on_connect_hook</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">,</span> +<a id="line-146" name="line-146"></a><span class="w"> </span><span class="n">DropboxClientConnectHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-147" name="line-147"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-148" name="line-148"></a><span class="w"> </span><span class="n">GHook</span><span class="w"> </span><span class="o">*</span><span class="n">newhook</span><span class="p">;</span> +<a id="line-149" name="line-149"></a> +<a id="line-150" name="line-150"></a><span class="w"> </span><span class="n">newhook</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_hook_alloc</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">));</span> +<a id="line-151" name="line-151"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">func</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dhcch</span><span class="p">;</span> +<a id="line-152" name="line-152"></a><span class="w"> </span><span class="n">newhook</span><span class="o">-></span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ud</span><span class="p">;</span> +<a id="line-153" name="line-153"></a> +<a id="line-154" name="line-154"></a><span class="w"> </span><span class="n">g_hook_append</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">onconnect_hooklist</span><span class="p">),</span><span class="w"> </span><span class="n">newhook</span><span class="p">);</span> +<a id="line-155" name="line-155"></a><span class="p">}</span> +<a id="line-156" name="line-156"></a> +<a id="line-157" name="line-157"></a><span class="cm">/* not thread safe */</span> +<a id="line-158" name="line-158"></a><span class="kt">void</span> +<a id="line-159" name="line-159"></a><span class="nf">dropbox_client_add_connection_attempt_hook</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">,</span> +<a id="line-160" name="line-160"></a><span class="w"> </span><span class="n">DropboxClientConnectionAttemptHook</span><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span> +<a id="line-161" name="line-161"></a><span class="w"> </span><span class="n">gpointer</span><span class="w"> </span><span class="n">ud</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-162" name="line-162"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"shouldn't be here..."</span><span class="p">);</span> +<a id="line-163" name="line-163"></a> +<a id="line-164" name="line-164"></a><span class="w"> </span><span class="n">dropbox_command_client_add_connection_attempt_hook</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">dcc</span><span class="p">),</span> +<a id="line-165" name="line-165"></a><span class="w"> </span><span class="n">dhcch</span><span class="p">,</span><span class="w"> </span><span class="n">ud</span><span class="p">);</span> +<a id="line-166" name="line-166"></a><span class="p">}</span> +<a id="line-167" name="line-167"></a> +<a id="line-168" name="line-168"></a><span class="cm">/* should only be called once on initialization */</span> +<a id="line-169" name="line-169"></a><span class="kt">void</span> +<a id="line-170" name="line-170"></a><span class="nf">dropbox_client_start</span><span class="p">(</span><span class="n">DropboxClient</span><span class="w"> </span><span class="o">*</span><span class="n">dc</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> +<a id="line-171" name="line-171"></a><span class="w"> </span><span class="n">debug</span><span class="p">(</span><span class="s">"starting connections"</span><span class="p">);</span> +<a id="line-172" name="line-172"></a><span class="w"> </span><span class="n">caja_dropbox_hooks_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">hookserv</span><span class="p">));</span> +<a id="line-173" name="line-173"></a><span class="w"> </span><span class="n">dropbox_command_client_start</span><span class="p">(</span><span class="o">&</span><span class="p">(</span><span class="n">dc</span><span class="o">-></span><span class="n">dcc</span><span class="p">));</span> +<a id="line-174" name="line-174"></a><span class="p">}</span> +</pre></div></td></tr></table></div> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/index.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/index.html new file mode 100644 index 0000000..3d20314 --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/index.html @@ -0,0 +1,274 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox</h1> + <div id="filters"> + + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="error"disabled/>error</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="warning"disabled/>warning</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="portability"checked/>portability</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleSeverity(this)" id="performance"disabled/>performance</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="style"checked/>style</label> + <label class="checkBtn"><input type="checkbox" onclick="toggleSeverity(this)" id="information"checked/>information</label> + | + <label class="checkBtn"><input type="checkbox" onclick="toggleTool(this)" id="cppcheck"checked/>cppcheck</label> + <label class="checkBtn disabled"><input type="checkbox" onclick="toggleTool(this)" id="clang-tidy"disabled/>clang-tidy</label> + | + <label class="severityHeader">File: <input type="text" oninput="filterFile(this.value)"/></label> + <label class="severityHeader">Filter: <input type="text" oninput="filterText(this.value)"/></label> + </div> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Defect summary</a> </p> + + <label><input type="checkbox" class="idToggle" onclick="toggleAll()" checked> Toggle all</label> + <table> + <tr><th>Show</th><th>#</th><th>Defect ID</th></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="missingIncludeSystem" name="missingIncludeSystem" checked></td><td>45</td><td>missingIncludeSystem</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="variableScope" name="variableScope" checked></td><td>2</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="checkersReport" name="checkersReport" checked></td><td>1</td><td>checkersReport</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="constParameterPointer" name="constParameterPointer" checked></td><td>1</td><td>constParameterPointer</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="constVariablePointer" name="constVariablePointer" checked></td><td>1</td><td>constVariablePointer</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>1</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" class="idToggle" onclick="toggleDisplay(this)" id="varFuncNullUB" name="varFuncNullUB" checked></td><td>1</td><td>varFuncNullUB</td></tr> + <tr><td></td><td>52</td><td>total</td></tr> + </table> + <p><a href="stats.html">Statistics</a></p> + </div> + <div id="content_index"> + + <table class="summaryTable"> + <tr><th>Line</th><th>Id</th><th>CWE</th><th>Severity</th><th>Message</th></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="12.html"></a></td></tr> + <tr class="checkersReport sev_information issue"><td></td><td>checkersReport</td><td></td><td>information</td><td>Active checkers: 106/592 (use --checkers-report=<filename> to see details)</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="2.html">src/async-io-coroutine.h</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="2.html#line-27">27</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="0.html">src/caja-dropbox-hooks.c</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="0.html#line-24">24</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <sys/types.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="0.html#line-25">25</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <sys/socket.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="0.html#line-26">26</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <sys/un.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="0.html#line-27">27</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <errno.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="0.html#line-28">28</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <unistd.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="0.html#line-29">29</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <fcntl.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="0.html#line-31">31</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <string.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="0.html#line-33">33</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="constParameterPointer sev_style issue"><td><a href="0.html#line-283">283</a></td><td>constParameterPointer</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td>Parameter 'hookserv' can be declared as pointer to const</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="4.html">src/caja-dropbox-hooks.h</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="4.html#line-27">27</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="5.html">src/caja-dropbox.c</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-25">25</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <config.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-28">28</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <sys/types.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-29">29</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <sys/socket.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-30">30</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <sys/un.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-31">31</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <errno.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-32">32</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <unistd.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-33">33</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <ctype.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-35">35</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-36">36</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib/gprintf.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-37">37</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib-object.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-38">38</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <gtk/gtk.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-40">40</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <libcaja-extension/caja-extension-types.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-41">41</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <libcaja-extension/caja-menu-provider.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="5.html#line-42">42</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <libcaja-extension/caja-info-provider.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="variableScope sev_style issue"><td><a href="5.html#line-312">312</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 'file' can be reduced.</td></tr> + <tr class="constVariablePointer sev_style issue"><td><a href="5.html#line-508">508</a></td><td>constVariablePointer</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td>Variable 'out_initial' can be declared as pointer to const</td></tr> + <tr class="variableScope sev_style issue"><td><a href="5.html#line-752">752</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 'i' can be reduced.</td></tr> + <tr class="knownConditionTrueFalse sev_style issue"><td><a href="5.html#line-756">756</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td>Condition 'emblem_paths_response' is always true</td></tr> + <tr class="varFuncNullUB sev_portability issue"><td><a href="5.html#line-847">847</a></td><td>varFuncNullUB</td><td><a href="https://cwe.mitre.org/data/definitions/475.html">475</a></td><td>portability</td><td>Passing NULL after the last typed argument to a variadic function leads to undefined behaviour.</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="7.html">src/caja-dropbox.h</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="7.html#line-27">27</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="7.html#line-28">28</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib-object.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="7.html#line-30">30</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <libcaja-extension/caja-info-provider.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="3.html">src/dropbox-client-util.h</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="3.html#line-27">27</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="9.html">src/dropbox-client.c</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="9.html#line-24">24</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="8.html">src/dropbox-client.h</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="8.html#line-27">27</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="10.html">src/dropbox-command-client.c</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="10.html#line-24">24</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <sys/types.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="10.html#line-25">25</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <sys/socket.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="10.html#line-26">26</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <sys/un.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="10.html#line-27">27</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <errno.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="10.html#line-28">28</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <unistd.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="10.html#line-29">29</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <fcntl.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="10.html#line-31">31</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <stdarg.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="10.html#line-32">32</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <string.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="10.html#line-34">34</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="6.html">src/dropbox-command-client.h</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="6.html#line-27">27</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <libcaja-extension/caja-info-provider.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="6.html#line-28">28</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <libcaja-extension/caja-file-info.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="11.html">src/dropbox.c</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="11.html#line-25">25</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <config.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="11.html#line-28">28</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib-object.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tbody class="fileEntry"> + <tr><td colspan="5"><a href="1.html">src/g-util.h</a></td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="1.html#line-27">27</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + <tr class="missingIncludeSystem sev_information issue"><td><a href="1.html#line-28">28</a></td><td>missingIncludeSystem</td><td></td><td>information</td><td>Include file: <glib/gprintf.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.</td></tr> + </tbody> + </table> + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/stats.html b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/stats.html new file mode 100644 index 0000000..738f644 --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/stats.html @@ -0,0 +1,183 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - caja-dropbox</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(cb) { + var elements = document.querySelectorAll("." + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("id-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleSeverity(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + var elements = document.querySelectorAll(".sev_" + cb.id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("severity-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleTool(cb) { + cb.parentElement.classList.toggle("unchecked", !cb.checked); + + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("tool-filtered", !cb.checked); + } + + updateFileRows(); + } + + function toggleAll() { + var elements = document.querySelectorAll(".idToggle"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var changed = elements[i].checked != elements[0].checked; + if (changed) { + elements[i].checked = elements[0].checked; + toggleDisplay(elements[i]); + } + } + } + + function filterFile(filter) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector("tr").querySelector("td").textContent.toLowerCase().includes(filter.toLowerCase()); + elements[i].classList.toggle("text-filtered", !visible); + } + } + + function filterText(text) { + filter = text.toLowerCase(); + var elements = document.querySelectorAll(".issue"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = false; + var fields = elements[i].querySelectorAll("td"); + for (var n = 0, num = fields.length; n < num; n++) { + if (fields[n].textContent.toLowerCase().includes(filter)) { + visible = true; + break; + } + } + elements[i].classList.toggle("text-filtered", !visible); + } + + updateFileRows(); + } + + function updateFileRows(element) { + var elements = document.querySelectorAll(".fileEntry"); + + for (var i = 0, len = elements.length; i < len; i++) { + var visible = elements[i].querySelector(".issue:not(.id-filtered):not(.severity-filtered):not(.tool-filtered):not(.text-filtered)"); + elements[i].classList.toggle("file-filtered", !visible); + } + } + + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="wrapper"> + <div id="header" class="header"> + <h1>Cppcheck report - caja-dropbox: Statistics</h1> + + </div> + + <div id="menu_index"> + <p><a href="index.html">Back to summary</a> </p> + + </div> + <div id="content_index"> +<p><span class="statHeader">Top 10 files for portability severity, total findings: 1</span><br> +   1 <a href="5.html"> src/caja-dropbox.c</a><br> +</p> +<p><span class="statHeader">Top 10 files for style severity, total findings: 5</span><br> +   4 <a href="5.html"> src/caja-dropbox.c</a><br> +   1 <a href="0.html"> src/caja-dropbox-hooks.c</a><br> +</p> +<p><span class="statHeader">Top 10 files for information severity, total findings: 45</span><br> +   14 <a href="5.html"> src/caja-dropbox.c</a><br> +   9  <a href="10.html"> src/dropbox-command-client.c</a><br> +   8  <a href="0.html"> src/caja-dropbox-hooks.c</a><br> +   3  <a href="7.html"> src/caja-dropbox.h</a><br> +   2  <a href="1.html"> src/g-util.h</a><br> +   2  <a href="11.html"> src/dropbox.c</a><br> +   2  <a href="6.html"> src/dropbox-command-client.h</a><br> +   1  <a href="8.html"> src/dropbox-client.h</a><br> +   1  <a href="9.html"> src/dropbox-client.c</a><br> +   1  <a href="3.html"> src/dropbox-client-util.h</a><br> +</p> + + </div> + <div id="footer" class="footer"> + <p> + Created by Cppcheck 2.13.0 (<a href="https://cppcheck.sourceforge.io">Sourceforge</a>, <a href="irc://irc.freenode.net/cppcheck">IRC</a>) + </p> + </div> + </div> + </body> +</html> diff --git a/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/style.css b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/style.css new file mode 100644 index 0000000..3897bfa --- /dev/null +++ b/2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/style.css @@ -0,0 +1,177 @@ + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; + font-size: 13px; + line-height: 1.5; + height: 100%; + margin: 0; +} + +#wrapper { + position: fixed; + height: 100vh; + width: 100vw; + display: grid; + grid-template-rows: fit-content(8rem) auto fit-content(8rem); + grid-template-columns: fit-content(25%) 1fr; + grid-template-areas: + "header header" + "menu content" + "footer footer"; +} + +h1 { + margin: 0 0 8px -2px; + font-size: 175%; +} + +.header { + padding: 0 0 5px 15px; + grid-area: header; + border-bottom: thin solid #aaa; +} + +.footer { + grid-area: footer; + border-top: thin solid #aaa; + font-size: 85%; + +} + +.footer > p { + margin: 4px; +} + +#menu, +#menu_index { + grid-area: menu; + text-align: left; + overflow: auto; + padding: 0 23px 15px 15px; + border-right: thin solid #aaa; + min-width: 200px; +} + +#menu > a { + display: block; + margin-left: 10px; + font-size: 12px; +} + +#content, +#content_index { + grid-area: content; + padding: 0px 5px 15px 15px; + overflow: auto; +} + +label { + white-space: nowrap; +} + +label.checkBtn.disabled { + color: #606060; + background: #e0e0e0; + font-style: italic; +} + +label.checkBtn, input[type="text"] { + border: 1px solid grey; + border-radius: 4px; + box-shadow: 1px 1px inset; + padding: 1px 5px; +} + +label.checkBtn { + white-space: nowrap; + background: #ccddff; +} + +label.unchecked { + background: #eff8ff; + box-shadow: 1px 1px 1px; +} + +label.checkBtn:hover, label.unchecked:hover{ + box-shadow: 0 0 2px; +} + +label.disabled:hover { + box-shadow: 1px 1px inset; +} + +label.checkBtn > input { + display:none; +} + +.summaryTable { + width: 100%; +} + +table.summaryTable td { padding: 0 5px 0 5px; } + +.statHeader, .severityHeader { + font-weight: bold; +} + +.warning { + background-color: #ffffa7; +} + +.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; + position: relative; + margin: -10px; +} + +.linenos { + border-right: thin solid #aaa; + color: #d3d3d3; + padding-right: 6px; +} + +.id-filtered, .severity-filtered, .file-filtered, .tool-filtered, .text-filtered { + visibility: collapse; +} @@ -0,0 +1 @@ +caja-dropbox.mate-desktop.dev diff --git a/index.html b/index.html new file mode 100644 index 0000000..67b72d6 --- /dev/null +++ b/index.html @@ -0,0 +1,47 @@ +<!DOCTYPE HTML> +<html lang="en"> + <head> + <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> + <link rel="icon" href="https://github.com/mate-desktop/mate-icon-theme/raw/master/mate/16x16/apps/system-file-manager.png" /> + <title>caja-dropbox Code Analyzer results</title> +</head> +<body> +<h1> + <a href="https://github.com/mate-desktop">mate-desktop</a>/<a href="https://github.com/mate-desktop/caja-dropbox">caja-dropbox</a> Static analyzer results +</h1> + <a href="https://github.com/mate-desktop/caja-dropbox" title="Github"><i class="fa fa-github fa-2x"></i>GitHub</a> + <a href="https://app.travis-ci.com/mate-desktop/caja-dropbox/builds/269043617" title="Travis CI"><img src="https://travis-ci.org/mate-desktop/caja-dropbox.svg?branch=master" alt="Build Status" /></a> +<hr/> +Commit: <a href="https://github.com/mate-desktop/caja-dropbox/commit/c39dc324eb09843f607a1c6d04ae17c7694d1d13">c39dc324eb09843f607a1c6d04ae17c7694d1d13</a><br/> +Compare: <a href="https://github.com/mate-desktop/caja-dropbox/compare/"></a><br/> +Branch: <a href="https://github.com/mate-desktop/caja-dropbox/tree/v1.28.0">v1.28.0</a><br/> +Time: 2024-02-21 17:39:52+00:00<br/> +Messages:<br/> +<pre> +release 1.28.0 +</pre> +<hr/> +<ul> +<li><a href="2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0">2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0</a></li> +<li><a href="2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0">2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0</a></li> +<li><a href=2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master>2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master</a></li> +<li><a href=2023-04-16-220119-5762-1@a4dac3d0ebf8_master>2023-04-16-220119-5762-1@a4dac3d0ebf8_master</a></li> +<li><a href=2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0>2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0</a></li> +<li><a href=2022-11-11-213951-5768-1@21f8797d992b_v1.27.0>2022-11-11-213951-5768-1@21f8797d992b_v1.27.0</a></li> +<li><a href=2022-11-11-213937-8071-cppcheck@21f8797d992b_master>2022-11-11-213937-8071-cppcheck@21f8797d992b_master</a></li> +<li><a href=2022-11-11-213923-5771-1@21f8797d992b_master>2022-11-11-213923-5771-1@21f8797d992b_master</a></li> +<li><a href=2022-11-10-210705-2471-cppcheck@ea7b890d9702_master>2022-11-10-210705-2471-cppcheck@ea7b890d9702_master</a></li> +<li><a href=2022-11-10-210649-5786-1@ea7b890d9702_master>2022-11-10-210649-5786-1@ea7b890d9702_master</a></li> +<li><a href=2022-10-29-140751-4046-cppcheck@8ec754ff8335_master>2022-10-29-140751-4046-cppcheck@8ec754ff8335_master</a></li> +<li><a href=2022-10-29-140736-5910-1@8ec754ff8335_master>2022-10-29-140736-5910-1@8ec754ff8335_master</a></li> +<li><a href=2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master>2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master</a></li> +<li><a href=2022-02-12-111711-5932-1@f4453b2d7fce_master>2022-02-12-111711-5932-1@f4453b2d7fce_master</a></li> +<li><a href=2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0>2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0</a></li> +<li><a href=2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0>2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0</a></li> +<li><a href=2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0>2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0</a></li> +<li><a href=2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0>2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0</a></li> +<li><a href=2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master>2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master</a></li> +<li><a href=2021-05-29-193455-5826-1@8f5bcb5e8b30_master>2021-05-29-193455-5826-1@8f5bcb5e8b30_master</a></li> +</ul> +</body> +</html> |