summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorraveit65 (via Travis CI) <[email protected]>2024-02-21 17:40:43 +0000
committerraveit65 (via Travis CI) <[email protected]>2024-02-21 17:40:43 +0000
commitc0d1c4d85f969d652508d63816f65315ae18cd7e (patch)
tree1897597961bae6e69b1ce512384c974044840305
downloadcaja-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
-rw-r--r--2021-05-29-193455-5826-1@8f5bcb5e8b30_master/index.html97
-rw-r--r--2021-05-29-193455-5826-1@8f5bcb5e8b30_master/report-7ad019.html1225
-rw-r--r--2021-05-29-193455-5826-1@8f5bcb5e8b30_master/report-8893d3.html1225
-rw-r--r--2021-05-29-193455-5826-1@8f5bcb5e8b30_master/scanview.css62
-rw-r--r--2021-05-29-193455-5826-1@8f5bcb5e8b30_master/sorttable.js492
-rw-r--r--2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/0.html849
-rw-r--r--2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/1.html2169
-rw-r--r--2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/index.html126
-rw-r--r--2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/stats.html111
-rw-r--r--2021-05-29-193513-5696-cppcheck@8f5bcb5e8b30_master/style.css137
-rw-r--r--2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/index.html97
-rw-r--r--2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/report-58010e.html1225
-rw-r--r--2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/report-685866.html1225
-rw-r--r--2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/scanview.css62
-rw-r--r--2021-06-19-233012-5833-1@1dd58e57ff8d_v1.25.0/sorttable.js492
-rw-r--r--2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/0.html849
-rw-r--r--2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/1.html2169
-rw-r--r--2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/index.html126
-rw-r--r--2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/stats.html111
-rw-r--r--2021-06-19-233030-5559-cppcheck@1dd58e57ff8d_v1.25.0/style.css137
-rw-r--r--2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/index.html97
-rw-r--r--2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/report-0cf114.html1225
-rw-r--r--2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/report-63011c.html1225
-rw-r--r--2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/scanview.css62
-rw-r--r--2021-08-06-190901-5809-1@8eef4a81e9cc_v1.26.0/sorttable.js492
-rw-r--r--2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/0.html2169
-rw-r--r--2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/index.html122
-rw-r--r--2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/stats.html108
-rw-r--r--2021-08-06-190918-5051-cppcheck@8eef4a81e9cc_v1.26.0/style.css137
-rw-r--r--2022-02-12-111711-5932-1@f4453b2d7fce_master/index.html97
-rw-r--r--2022-02-12-111711-5932-1@f4453b2d7fce_master/report-51813c.html1225
-rw-r--r--2022-02-12-111711-5932-1@f4453b2d7fce_master/report-b2c20b.html1225
-rw-r--r--2022-02-12-111711-5932-1@f4453b2d7fce_master/scanview.css62
-rw-r--r--2022-02-12-111711-5932-1@f4453b2d7fce_master/sorttable.js492
-rw-r--r--2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/0.html2169
-rw-r--r--2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/index.html122
-rw-r--r--2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/stats.html108
-rw-r--r--2022-02-12-111726-5833-cppcheck@f4453b2d7fce_master/style.css137
-rw-r--r--2022-10-29-140736-5910-1@8ec754ff8335_master/index.html94
-rw-r--r--2022-10-29-140736-5910-1@8ec754ff8335_master/report-1b9128.html1553
-rw-r--r--2022-10-29-140736-5910-1@8ec754ff8335_master/scanview.css62
-rw-r--r--2022-10-29-140736-5910-1@8ec754ff8335_master/sorttable.js492
-rw-r--r--2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/0.html2231
-rw-r--r--2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/index.html202
-rw-r--r--2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/stats.html170
-rw-r--r--2022-10-29-140751-4046-cppcheck@8ec754ff8335_master/style.css177
-rw-r--r--2022-11-10-210649-5786-1@ea7b890d9702_master/index.html94
-rw-r--r--2022-11-10-210649-5786-1@ea7b890d9702_master/report-1b9128.html1553
-rw-r--r--2022-11-10-210649-5786-1@ea7b890d9702_master/scanview.css62
-rw-r--r--2022-11-10-210649-5786-1@ea7b890d9702_master/sorttable.js492
-rw-r--r--2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/0.html2231
-rw-r--r--2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/index.html202
-rw-r--r--2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/stats.html170
-rw-r--r--2022-11-10-210705-2471-cppcheck@ea7b890d9702_master/style.css177
-rw-r--r--2022-11-11-213923-5771-1@21f8797d992b_master/index.html94
-rw-r--r--2022-11-11-213923-5771-1@21f8797d992b_master/report-1b9128.html1553
-rw-r--r--2022-11-11-213923-5771-1@21f8797d992b_master/scanview.css62
-rw-r--r--2022-11-11-213923-5771-1@21f8797d992b_master/sorttable.js492
-rw-r--r--2022-11-11-213937-8071-cppcheck@21f8797d992b_master/0.html2231
-rw-r--r--2022-11-11-213937-8071-cppcheck@21f8797d992b_master/index.html202
-rw-r--r--2022-11-11-213937-8071-cppcheck@21f8797d992b_master/stats.html170
-rw-r--r--2022-11-11-213937-8071-cppcheck@21f8797d992b_master/style.css177
-rw-r--r--2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/index.html94
-rw-r--r--2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/report-1b9128.html1553
-rw-r--r--2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/scanview.css62
-rw-r--r--2022-11-11-213951-5768-1@21f8797d992b_v1.27.0/sorttable.js492
-rw-r--r--2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/0.html2231
-rw-r--r--2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/index.html202
-rw-r--r--2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/stats.html170
-rw-r--r--2022-11-11-214007-0694-cppcheck@21f8797d992b_v1.27.0/style.css177
-rw-r--r--2023-04-16-220119-5762-1@a4dac3d0ebf8_master/index.html94
-rw-r--r--2023-04-16-220119-5762-1@a4dac3d0ebf8_master/report-1b9128.html1553
-rw-r--r--2023-04-16-220119-5762-1@a4dac3d0ebf8_master/scanview.css62
-rw-r--r--2023-04-16-220119-5762-1@a4dac3d0ebf8_master/sorttable.js492
-rw-r--r--2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/0.html2233
-rw-r--r--2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/index.html202
-rw-r--r--2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/stats.html170
-rw-r--r--2023-04-16-220134-7625-cppcheck@a4dac3d0ebf8_master/style.css177
-rw-r--r--2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/index.html94
-rw-r--r--2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/report-1b9128.html1553
-rw-r--r--2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/scanview.css62
-rw-r--r--2024-02-21-173934-5699-1@c39dc324eb09_v1.28.0/sorttable.js492
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/0.html911
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/1.html335
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/10.html1983
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/11.html345
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/2.html367
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/3.html315
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/4.html395
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/5.html2233
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/6.html463
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/7.html373
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/8.html389
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/9.html585
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/index.html274
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/stats.html183
-rw-r--r--2024-02-21-173952-0547-cppcheck@c39dc324eb09_v1.28.0/style.css177
-rw-r--r--CNAME1
-rw-r--r--index.html47
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">&nbsp;&#x25BE;</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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;sys/types.h&gt;</span><span class="cp"></span>
+<a name="line-25"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/socket.h&gt;</span><span class="cp"></span>
+<a name="line-26"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/un.h&gt;</span><span class="cp"></span>
+<a name="line-27"></a><span class="cp">#include</span> <span class="cpf">&lt;errno.h&gt;</span><span class="cp"></span>
+<a name="line-28"></a><span class="cp">#include</span> <span class="cpf">&lt;unistd.h&gt;</span><span class="cp"></span>
+<a name="line-29"></a><span class="cp">#include</span> <span class="cpf">&lt;fcntl.h&gt;</span><span class="cp"></span>
+<a name="line-30"></a>
+<a name="line-31"></a><span class="cp">#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp"></span>
+<a name="line-32"></a>
+<a name="line-33"></a><span class="cp">#include</span> <span class="cpf">&lt;glib.h&gt;</span><span class="cp"></span>
+<a name="line-34"></a>
+<a name="line-35"></a><span class="cp">#include</span> <span class="cpf">&quot;g-util.h&quot;</span><span class="cp"></span>
+<a name="line-36"></a><span class="cp">#include</span> <span class="cpf">&quot;async-io-coroutine.h&quot;</span><span class="cp"></span>
+<a name="line-37"></a><span class="cp">#include</span> <span class="cpf">&quot;dropbox-client-util.h&quot;</span><span class="cp"></span>
+<a name="line-38"></a><span class="cp">#include</span> <span class="cpf">&quot;caja-dropbox-hooks.h&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&lt;--- 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(&quot;got a hook name: %s&quot;, hookserv-&gt;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 &quot;done&quot; */</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">-&gt;</span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span> <span class="o">&gt;=</span> <span class="mi">20</span><span class="p">)</span> <span class="p">{</span><span class="error2">&lt;--- 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">-&gt;</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">&quot;done&quot;</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">&lt;--- 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">-&gt;</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">&quot;bad parse&quot;</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">-&gt;</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">-&gt;</span><span class="n">dispatch_table</span><span class="p">,</span>
+<a name="line-111"></a> <span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</span><span class="n">hook</span><span class="p">)(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;hook client disconnected&quot;</span><span class="p">);</span>
+<a name="line-128"></a>
+<a name="line-129"></a> <span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">chan</span><span class="p">);</span>
+<a name="line-146"></a> <span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&lt;</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">-&gt;</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">&lt;</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">&quot;%s/.dropbox/iface_socket&quot;</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">-&gt;</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">&amp;</span><span class="n">addr</span><span class="p">,</span> <span class="n">addr_len</span><span class="p">)</span> <span class="o">&lt;</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">&amp;</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">-&gt;</span><span class="n">socket</span><span class="p">,</span> <span class="o">&amp;</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">-&gt;</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">&amp;</span><span class="n">writers</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="o">&amp;</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">-&gt;</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">&amp;</span><span class="n">addr</span><span class="p">,</span> <span class="n">addr_len</span><span class="p">)</span> <span class="o">&lt;</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">&quot;couldn&#39;t connect to hook server after 1 second&quot;</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">-&gt;</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&#39;s create the channel and wait on it */</span>
+<a name="line-218"></a> <span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">chan</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</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">-&gt;</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(&quot;create channel&quot;); */</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">-&gt;</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">-&gt;</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">-&gt;</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(&quot;set non blocking&quot;); */</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;hook client connected&quot;</span><span class="p">);</span>
+<a name="line-252"></a> <span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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(&quot;added watch&quot;);*/</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">-&gt;</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">&quot;forcing hook to reconnect&quot;</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">-&gt;</span><span class="n">event_source</span> <span class="o">&gt;=</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">-&gt;</span><span class="n">event_source</span> <span class="o">&gt;</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">-&gt;</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">-&gt;</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">&quot;event source was zero!!!!!&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</span><span class="n">ondisconnect_hooklist</span><span class="p">));</span>
+<a name="line-305"></a> <span class="n">newhook</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</span><span class="n">onconnect_hooklist</span><span class="p">));</span>
+<a name="line-318"></a> <span class="n">newhook</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;sys/types.h&gt;</span><span class="cp"></span>
+<a name="line-29"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/socket.h&gt;</span><span class="cp"></span>
+<a name="line-30"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/un.h&gt;</span><span class="cp"></span>
+<a name="line-31"></a><span class="cp">#include</span> <span class="cpf">&lt;errno.h&gt;</span><span class="cp"></span>
+<a name="line-32"></a><span class="cp">#include</span> <span class="cpf">&lt;unistd.h&gt;</span><span class="cp"></span>
+<a name="line-33"></a><span class="cp">#include</span> <span class="cpf">&lt;ctype.h&gt;</span><span class="cp"></span>
+<a name="line-34"></a>
+<a name="line-35"></a><span class="cp">#include</span> <span class="cpf">&lt;glib.h&gt;</span><span class="cp"></span>
+<a name="line-36"></a><span class="cp">#include</span> <span class="cpf">&lt;glib/gprintf.h&gt;</span><span class="cp"></span>
+<a name="line-37"></a><span class="cp">#include</span> <span class="cpf">&lt;glib-object.h&gt;</span><span class="cp"></span>
+<a name="line-38"></a><span class="cp">#include</span> <span class="cpf">&lt;gtk/gtk.h&gt;</span><span class="cp"></span>
+<a name="line-39"></a>
+<a name="line-40"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-extension-types.h&gt;</span><span class="cp"></span>
+<a name="line-41"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-menu-provider.h&gt;</span><span class="cp"></span>
+<a name="line-42"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-info-provider.h&gt;</span><span class="cp"></span>
+<a name="line-43"></a>
+<a name="line-44"></a><span class="cp">#include</span> <span class="cpf">&quot;g-util.h&quot;</span><span class="cp"></span>
+<a name="line-45"></a><span class="cp">#include</span> <span class="cpf">&quot;dropbox-command-client.h&quot;</span><span class="cp"></span>
+<a name="line-46"></a><span class="cp">#include</span> <span class="cpf">&quot;caja-dropbox.h&quot;</span><span class="cp"></span>
+<a name="line-47"></a><span class="cp">#include</span> <span class="cpf">&quot;caja-dropbox-hooks.h&quot;</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">&quot;dropbox-uptodate&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox-syncing&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox-unsyncable&quot;</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 &#39;.&#39; and &#39;..&#39;</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">&#39;/&#39;</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">&quot;/&quot;</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">&quot;/&quot;</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">&quot;..&quot;</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">&gt;</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">&quot;.&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&quot;resetting file %p&quot;</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&#39;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">-&gt;</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">-&gt;</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(&quot;removing %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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&#39;t do this for us, for some reason</span>
+<a name="line-176"></a><span class="cm"> the file&#39;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">&quot;shifty old: %s, new %s&quot;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;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">-&gt;</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">-&gt;</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(&quot;adding %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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">&quot;changed&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;path&quot;</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">&#39;/&#39;</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">&lt;--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;file&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a name="line-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">&quot;shell touch for %s&quot;</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">-&gt;</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">&quot;gonna reset %s&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">-&gt;</span><span class="n">emblems_response</span><span class="p">,</span> <span class="s">&quot;emblems&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">-&gt;</span><span class="n">file_status_response</span><span class="p">,</span> <span class="s">&quot;status&quot;</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&amp;&amp;</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">&amp;&amp;</span>
+<a name="line-359"></a> <span class="n">dficr</span><span class="o">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">folder_tag_response</span><span class="p">,</span> <span class="s">&quot;tag&quot;</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">&quot;public&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;web&quot;</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">&quot;shared&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;people&quot;</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">&quot;photos&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;photos&quot;</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">&quot;sandbox&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;star&quot;</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">&quot;up to date&quot;</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">&quot;syncing&quot;</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">&quot;unsyncable&quot;</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">&gt;</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(&quot;%s to %s&quot;, emblems[emblem_code-1],</span>
+<a name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr-&gt;dfic-&gt;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">update_complete</span><span class="p">,</span>
+<a name="line-409"></a> <span class="n">dficr</span><span class="o">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</span><span class="p">);</span>
+<a name="line-455"></a>
+<a name="line-456"></a> <span class="n">dcac</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;verb&quot;</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">-&gt;</span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;icon_overlay_context_action&quot;</span><span class="p">);</span>
+<a name="line-494"></a> <span class="n">dcac</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&#39;0&#39;</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">&#39;a&#39;</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 --&gt; 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&#39;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">&lt;</span> <span class="n">n</span> <span class="o">&amp;&amp;</span> <span class="o">*</span><span class="n">in</span> <span class="o">!=</span> <span class="sc">&#39;\0&#39;</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">&#39;%&#39;</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">&#39;\0&#39;</span><span class="p">)</span> <span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&lt;&lt;</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&#39;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">&lt;</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">&#39;\0&#39;</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">&quot;~&quot;</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">&#39;~&#39;</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">-&gt;</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">&quot;|&quot;</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">&quot;::&quot;</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">-&gt;</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">&quot;&quot;</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">-&gt;</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">&#39;!&#39;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">&quot;activate&quot;</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">&amp;</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">&amp;</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">&quot;sensitive&quot;</span><span class="p">,</span> <span class="o">&amp;</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&#39;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">&lt;</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">-&gt;</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">-&gt;</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&#39;t correctly encoded, or isn&#39;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 &quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;icon_overlay_context_options&quot;</span><span class="p">);</span>
+<a name="line-682"></a> <span class="n">dgc</span><span class="o">-&gt;</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">-&gt;</span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;paths&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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&#39;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">&quot;options&quot;</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">&amp;&amp;</span> <span class="o">*</span><span class="n">options</span> <span class="o">&amp;&amp;</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">&quot;CajaDropbox::root_item&quot;</span><span class="p">,</span>
+<a name="line-722"></a> <span class="s">&quot;Dropbox&quot;</span><span class="p">,</span> <span class="s">&quot;Dropbox Options&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox&quot;</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">&quot;CajaDropbox::&quot;</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&#39;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">&lt;--- 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">&lt;--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;i&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a name="line-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">&amp;&amp;</span><span class="error2">&lt;--- 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">&quot;path&quot;</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&#39;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">&quot;path&quot;</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">&amp;</span><span class="n">paths</span><span class="p">,</span> <span class="o">&amp;</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">&lt;</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">&quot;path&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">emblem_paths</span><span class="p">);</span>
+<a name="line-832"></a> <span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;get_emblem_paths&quot;</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span><div class="verbose expandable"><span class="error2">&lt;--- 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 &quot;ERROR&quot;, 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 &quot;ERROR&quot; output go away.
+#include &lt;stdarg.h&gt;
+#include &lt;stdio.h&gt;
+
+void f(char *s, ...) {
+ va_list ap;
+ va_start(ap,s);
+ for (;;) {
+ char *p = va_arg(ap,char*);
+ printf(&quot;%018p, %s\n&quot;, p, (long)p &amp; 255 ? p : &quot;&quot;);
+ if(!p) break;
+ }
+ va_end(ap);
+}
+
+void g() {
+ char *s2 = &quot;x&quot;;
+ char *s3 = &quot;ERROR&quot;;
+
+ // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64
+ f(&quot;first&quot;, s2, s2, s2, s2, s2, 0, s3, (char*)0);
+}
+
+void h() {
+ int i;
+ volatile unsigned char a[1000];
+ for (i = 0; i&lt;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</span><span class="n">emblem_paths</span><span class="p">);</span>
+<a name="line-857"></a> <span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span> <span class="s">&quot;shell_touch&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;about to start client connection&quot;</span><span class="p">);</span>
+<a name="line-905"></a> <span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;just checking&quot;</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">&quot;CajaDropbox&quot;</span><span class="p">,</span>
+<a name="line-955"></a> <span class="o">&amp;</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">&amp;</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">&amp;</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 &apos;file&apos; 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 &apos;i&apos; 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 &apos;emblem_paths_response&apos; 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>
+&#160;&#160;&#160;2&#160;<a href="0.html"> src/caja-dropbox-hooks.c</a><br>
+</p>
+<p>Top 10 files for portability severity, total findings: 1<br>
+&#160;&#160;&#160;1&#160;<a href="1.html"> src/caja-dropbox.c</a><br>
+</p>
+<p>Top 10 files for style severity, total findings: 3<br>
+&#160;&#160;&#160;3&#160;<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">&nbsp;&#x25BE;</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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;sys/types.h&gt;</span><span class="cp"></span>
+<a name="line-25"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/socket.h&gt;</span><span class="cp"></span>
+<a name="line-26"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/un.h&gt;</span><span class="cp"></span>
+<a name="line-27"></a><span class="cp">#include</span> <span class="cpf">&lt;errno.h&gt;</span><span class="cp"></span>
+<a name="line-28"></a><span class="cp">#include</span> <span class="cpf">&lt;unistd.h&gt;</span><span class="cp"></span>
+<a name="line-29"></a><span class="cp">#include</span> <span class="cpf">&lt;fcntl.h&gt;</span><span class="cp"></span>
+<a name="line-30"></a>
+<a name="line-31"></a><span class="cp">#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp"></span>
+<a name="line-32"></a>
+<a name="line-33"></a><span class="cp">#include</span> <span class="cpf">&lt;glib.h&gt;</span><span class="cp"></span>
+<a name="line-34"></a>
+<a name="line-35"></a><span class="cp">#include</span> <span class="cpf">&quot;g-util.h&quot;</span><span class="cp"></span>
+<a name="line-36"></a><span class="cp">#include</span> <span class="cpf">&quot;async-io-coroutine.h&quot;</span><span class="cp"></span>
+<a name="line-37"></a><span class="cp">#include</span> <span class="cpf">&quot;dropbox-client-util.h&quot;</span><span class="cp"></span>
+<a name="line-38"></a><span class="cp">#include</span> <span class="cpf">&quot;caja-dropbox-hooks.h&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&lt;--- 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(&quot;got a hook name: %s&quot;, hookserv-&gt;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 &quot;done&quot; */</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">-&gt;</span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span> <span class="o">&gt;=</span> <span class="mi">20</span><span class="p">)</span> <span class="p">{</span><span class="error2">&lt;--- 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">-&gt;</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">&quot;done&quot;</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">&lt;--- 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">-&gt;</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">&quot;bad parse&quot;</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">-&gt;</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">-&gt;</span><span class="n">dispatch_table</span><span class="p">,</span>
+<a name="line-111"></a> <span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</span><span class="n">hook</span><span class="p">)(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;hook client disconnected&quot;</span><span class="p">);</span>
+<a name="line-128"></a>
+<a name="line-129"></a> <span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">chan</span><span class="p">);</span>
+<a name="line-146"></a> <span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&lt;</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">-&gt;</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">&lt;</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">&quot;%s/.dropbox/iface_socket&quot;</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">-&gt;</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">&amp;</span><span class="n">addr</span><span class="p">,</span> <span class="n">addr_len</span><span class="p">)</span> <span class="o">&lt;</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">&amp;</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">-&gt;</span><span class="n">socket</span><span class="p">,</span> <span class="o">&amp;</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">-&gt;</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">&amp;</span><span class="n">writers</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="o">&amp;</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">-&gt;</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">&amp;</span><span class="n">addr</span><span class="p">,</span> <span class="n">addr_len</span><span class="p">)</span> <span class="o">&lt;</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">&quot;couldn&#39;t connect to hook server after 1 second&quot;</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">-&gt;</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&#39;s create the channel and wait on it */</span>
+<a name="line-218"></a> <span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">chan</span><span class="p">,</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</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">-&gt;</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(&quot;create channel&quot;); */</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">-&gt;</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">-&gt;</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">-&gt;</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(&quot;set non blocking&quot;); */</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;hook client connected&quot;</span><span class="p">);</span>
+<a name="line-252"></a> <span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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(&quot;added watch&quot;);*/</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">-&gt;</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">&quot;forcing hook to reconnect&quot;</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">-&gt;</span><span class="n">event_source</span> <span class="o">&gt;=</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">-&gt;</span><span class="n">event_source</span> <span class="o">&gt;</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">-&gt;</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">-&gt;</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">&quot;event source was zero!!!!!&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</span><span class="n">ondisconnect_hooklist</span><span class="p">));</span>
+<a name="line-305"></a> <span class="n">newhook</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</span><span class="n">onconnect_hooklist</span><span class="p">));</span>
+<a name="line-318"></a> <span class="n">newhook</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;sys/types.h&gt;</span><span class="cp"></span>
+<a name="line-29"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/socket.h&gt;</span><span class="cp"></span>
+<a name="line-30"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/un.h&gt;</span><span class="cp"></span>
+<a name="line-31"></a><span class="cp">#include</span> <span class="cpf">&lt;errno.h&gt;</span><span class="cp"></span>
+<a name="line-32"></a><span class="cp">#include</span> <span class="cpf">&lt;unistd.h&gt;</span><span class="cp"></span>
+<a name="line-33"></a><span class="cp">#include</span> <span class="cpf">&lt;ctype.h&gt;</span><span class="cp"></span>
+<a name="line-34"></a>
+<a name="line-35"></a><span class="cp">#include</span> <span class="cpf">&lt;glib.h&gt;</span><span class="cp"></span>
+<a name="line-36"></a><span class="cp">#include</span> <span class="cpf">&lt;glib/gprintf.h&gt;</span><span class="cp"></span>
+<a name="line-37"></a><span class="cp">#include</span> <span class="cpf">&lt;glib-object.h&gt;</span><span class="cp"></span>
+<a name="line-38"></a><span class="cp">#include</span> <span class="cpf">&lt;gtk/gtk.h&gt;</span><span class="cp"></span>
+<a name="line-39"></a>
+<a name="line-40"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-extension-types.h&gt;</span><span class="cp"></span>
+<a name="line-41"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-menu-provider.h&gt;</span><span class="cp"></span>
+<a name="line-42"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-info-provider.h&gt;</span><span class="cp"></span>
+<a name="line-43"></a>
+<a name="line-44"></a><span class="cp">#include</span> <span class="cpf">&quot;g-util.h&quot;</span><span class="cp"></span>
+<a name="line-45"></a><span class="cp">#include</span> <span class="cpf">&quot;dropbox-command-client.h&quot;</span><span class="cp"></span>
+<a name="line-46"></a><span class="cp">#include</span> <span class="cpf">&quot;caja-dropbox.h&quot;</span><span class="cp"></span>
+<a name="line-47"></a><span class="cp">#include</span> <span class="cpf">&quot;caja-dropbox-hooks.h&quot;</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">&quot;dropbox-uptodate&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox-syncing&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox-unsyncable&quot;</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 &#39;.&#39; and &#39;..&#39;</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">&#39;/&#39;</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">&quot;/&quot;</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">&quot;/&quot;</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">&quot;..&quot;</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">&gt;</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">&quot;.&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&quot;resetting file %p&quot;</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&#39;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">-&gt;</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">-&gt;</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(&quot;removing %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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&#39;t do this for us, for some reason</span>
+<a name="line-176"></a><span class="cm"> the file&#39;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">&quot;shifty old: %s, new %s&quot;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;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">-&gt;</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">-&gt;</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(&quot;adding %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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">&quot;changed&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;path&quot;</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">&#39;/&#39;</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">&lt;--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;file&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a name="line-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">&quot;shell touch for %s&quot;</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">-&gt;</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">&quot;gonna reset %s&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">-&gt;</span><span class="n">emblems_response</span><span class="p">,</span> <span class="s">&quot;emblems&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">-&gt;</span><span class="n">file_status_response</span><span class="p">,</span> <span class="s">&quot;status&quot;</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&amp;&amp;</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">&amp;&amp;</span>
+<a name="line-359"></a> <span class="n">dficr</span><span class="o">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">folder_tag_response</span><span class="p">,</span> <span class="s">&quot;tag&quot;</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">&quot;public&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;web&quot;</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">&quot;shared&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;people&quot;</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">&quot;photos&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;photos&quot;</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">&quot;sandbox&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;star&quot;</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">&quot;up to date&quot;</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">&quot;syncing&quot;</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">&quot;unsyncable&quot;</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">&gt;</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(&quot;%s to %s&quot;, emblems[emblem_code-1],</span>
+<a name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr-&gt;dfic-&gt;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">update_complete</span><span class="p">,</span>
+<a name="line-409"></a> <span class="n">dficr</span><span class="o">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</span><span class="p">);</span>
+<a name="line-455"></a>
+<a name="line-456"></a> <span class="n">dcac</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;verb&quot;</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">-&gt;</span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;icon_overlay_context_action&quot;</span><span class="p">);</span>
+<a name="line-494"></a> <span class="n">dcac</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&#39;0&#39;</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">&#39;a&#39;</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 --&gt; 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&#39;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">&lt;</span> <span class="n">n</span> <span class="o">&amp;&amp;</span> <span class="o">*</span><span class="n">in</span> <span class="o">!=</span> <span class="sc">&#39;\0&#39;</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">&#39;%&#39;</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">&#39;\0&#39;</span><span class="p">)</span> <span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&lt;&lt;</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&#39;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">&lt;</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">&#39;\0&#39;</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">&quot;~&quot;</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">&#39;~&#39;</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">-&gt;</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">&quot;|&quot;</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">&quot;::&quot;</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">-&gt;</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">&quot;&quot;</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">-&gt;</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">&#39;!&#39;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">&quot;activate&quot;</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">&amp;</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">&amp;</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">&quot;sensitive&quot;</span><span class="p">,</span> <span class="o">&amp;</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&#39;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">&lt;</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">-&gt;</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">-&gt;</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&#39;t correctly encoded, or isn&#39;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 &quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;icon_overlay_context_options&quot;</span><span class="p">);</span>
+<a name="line-682"></a> <span class="n">dgc</span><span class="o">-&gt;</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">-&gt;</span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;paths&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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&#39;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">&quot;options&quot;</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">&amp;&amp;</span> <span class="o">*</span><span class="n">options</span> <span class="o">&amp;&amp;</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">&quot;CajaDropbox::root_item&quot;</span><span class="p">,</span>
+<a name="line-722"></a> <span class="s">&quot;Dropbox&quot;</span><span class="p">,</span> <span class="s">&quot;Dropbox Options&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox&quot;</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">&quot;CajaDropbox::&quot;</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&#39;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">&lt;--- 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">&lt;--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;i&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a name="line-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">&amp;&amp;</span><span class="error2">&lt;--- 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">&quot;path&quot;</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&#39;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">&quot;path&quot;</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">&amp;</span><span class="n">paths</span><span class="p">,</span> <span class="o">&amp;</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">&lt;</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">&quot;path&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">emblem_paths</span><span class="p">);</span>
+<a name="line-832"></a> <span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;get_emblem_paths&quot;</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span><div class="verbose expandable"><span class="error2">&lt;--- 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 &quot;ERROR&quot;, 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 &quot;ERROR&quot; output go away.
+#include &lt;stdarg.h&gt;
+#include &lt;stdio.h&gt;
+
+void f(char *s, ...) {
+ va_list ap;
+ va_start(ap,s);
+ for (;;) {
+ char *p = va_arg(ap,char*);
+ printf(&quot;%018p, %s\n&quot;, p, (long)p &amp; 255 ? p : &quot;&quot;);
+ if(!p) break;
+ }
+ va_end(ap);
+}
+
+void g() {
+ char *s2 = &quot;x&quot;;
+ char *s3 = &quot;ERROR&quot;;
+
+ // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64
+ f(&quot;first&quot;, s2, s2, s2, s2, s2, 0, s3, (char*)0);
+}
+
+void h() {
+ int i;
+ volatile unsigned char a[1000];
+ for (i = 0; i&lt;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</span><span class="n">emblem_paths</span><span class="p">);</span>
+<a name="line-857"></a> <span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span> <span class="s">&quot;shell_touch&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;about to start client connection&quot;</span><span class="p">);</span>
+<a name="line-905"></a> <span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;just checking&quot;</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">&quot;CajaDropbox&quot;</span><span class="p">,</span>
+<a name="line-955"></a> <span class="o">&amp;</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">&amp;</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">&amp;</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 &apos;file&apos; 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 &apos;i&apos; 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 &apos;emblem_paths_response&apos; 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>
+&#160;&#160;&#160;2&#160;<a href="0.html"> src/caja-dropbox-hooks.c</a><br>
+</p>
+<p>Top 10 files for portability severity, total findings: 1<br>
+&#160;&#160;&#160;1&#160;<a href="1.html"> src/caja-dropbox.c</a><br>
+</p>
+<p>Top 10 files for style severity, total findings: 3<br>
+&#160;&#160;&#160;3&#160;<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">&nbsp;&#x25BE;</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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;sys/types.h&gt;</span><span class="cp"></span>
+<a name="line-29"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/socket.h&gt;</span><span class="cp"></span>
+<a name="line-30"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/un.h&gt;</span><span class="cp"></span>
+<a name="line-31"></a><span class="cp">#include</span> <span class="cpf">&lt;errno.h&gt;</span><span class="cp"></span>
+<a name="line-32"></a><span class="cp">#include</span> <span class="cpf">&lt;unistd.h&gt;</span><span class="cp"></span>
+<a name="line-33"></a><span class="cp">#include</span> <span class="cpf">&lt;ctype.h&gt;</span><span class="cp"></span>
+<a name="line-34"></a>
+<a name="line-35"></a><span class="cp">#include</span> <span class="cpf">&lt;glib.h&gt;</span><span class="cp"></span>
+<a name="line-36"></a><span class="cp">#include</span> <span class="cpf">&lt;glib/gprintf.h&gt;</span><span class="cp"></span>
+<a name="line-37"></a><span class="cp">#include</span> <span class="cpf">&lt;glib-object.h&gt;</span><span class="cp"></span>
+<a name="line-38"></a><span class="cp">#include</span> <span class="cpf">&lt;gtk/gtk.h&gt;</span><span class="cp"></span>
+<a name="line-39"></a>
+<a name="line-40"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-extension-types.h&gt;</span><span class="cp"></span>
+<a name="line-41"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-menu-provider.h&gt;</span><span class="cp"></span>
+<a name="line-42"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-info-provider.h&gt;</span><span class="cp"></span>
+<a name="line-43"></a>
+<a name="line-44"></a><span class="cp">#include</span> <span class="cpf">&quot;g-util.h&quot;</span><span class="cp"></span>
+<a name="line-45"></a><span class="cp">#include</span> <span class="cpf">&quot;dropbox-command-client.h&quot;</span><span class="cp"></span>
+<a name="line-46"></a><span class="cp">#include</span> <span class="cpf">&quot;caja-dropbox.h&quot;</span><span class="cp"></span>
+<a name="line-47"></a><span class="cp">#include</span> <span class="cpf">&quot;caja-dropbox-hooks.h&quot;</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">&quot;dropbox-uptodate&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox-syncing&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox-unsyncable&quot;</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 &#39;.&#39; and &#39;..&#39;</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">&#39;/&#39;</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">&quot;/&quot;</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">&quot;/&quot;</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">&quot;..&quot;</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">&gt;</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">&quot;.&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&quot;resetting file %p&quot;</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&#39;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">-&gt;</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">-&gt;</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(&quot;removing %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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&#39;t do this for us, for some reason</span>
+<a name="line-176"></a><span class="cm"> the file&#39;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">&quot;shifty old: %s, new %s&quot;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;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">-&gt;</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">-&gt;</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(&quot;adding %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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">&quot;changed&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;path&quot;</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">&#39;/&#39;</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">&lt;--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;file&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a name="line-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">&quot;shell touch for %s&quot;</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">-&gt;</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">&quot;gonna reset %s&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">-&gt;</span><span class="n">emblems_response</span><span class="p">,</span> <span class="s">&quot;emblems&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">-&gt;</span><span class="n">file_status_response</span><span class="p">,</span> <span class="s">&quot;status&quot;</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&amp;&amp;</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">&amp;&amp;</span>
+<a name="line-359"></a> <span class="n">dficr</span><span class="o">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">folder_tag_response</span><span class="p">,</span> <span class="s">&quot;tag&quot;</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">&quot;public&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;web&quot;</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">&quot;shared&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;people&quot;</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">&quot;photos&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;photos&quot;</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">&quot;sandbox&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;star&quot;</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">&quot;up to date&quot;</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">&quot;syncing&quot;</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">&quot;unsyncable&quot;</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">&gt;</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(&quot;%s to %s&quot;, emblems[emblem_code-1],</span>
+<a name="line-396"></a><span class="cm"> g_filename_from_uri(caja_file_info_get_uri(dficr-&gt;dfic-&gt;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">update_complete</span><span class="p">,</span>
+<a name="line-409"></a> <span class="n">dficr</span><span class="o">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</span><span class="p">);</span>
+<a name="line-455"></a>
+<a name="line-456"></a> <span class="n">dcac</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;verb&quot;</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">-&gt;</span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;icon_overlay_context_action&quot;</span><span class="p">);</span>
+<a name="line-494"></a> <span class="n">dcac</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&#39;0&#39;</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">&#39;a&#39;</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 --&gt; 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&#39;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">&lt;</span> <span class="n">n</span> <span class="o">&amp;&amp;</span> <span class="o">*</span><span class="n">in</span> <span class="o">!=</span> <span class="sc">&#39;\0&#39;</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">&#39;%&#39;</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">&#39;\0&#39;</span><span class="p">)</span> <span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&lt;&lt;</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&#39;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">&lt;</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">&#39;\0&#39;</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">&quot;~&quot;</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">&#39;~&#39;</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">-&gt;</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">&quot;|&quot;</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">&quot;::&quot;</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">-&gt;</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">&quot;&quot;</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">-&gt;</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">&#39;!&#39;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">&quot;activate&quot;</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">&amp;</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">&amp;</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">&quot;sensitive&quot;</span><span class="p">,</span> <span class="o">&amp;</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&#39;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">&lt;</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">-&gt;</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">-&gt;</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&#39;t correctly encoded, or isn&#39;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 &quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;icon_overlay_context_options&quot;</span><span class="p">);</span>
+<a name="line-682"></a> <span class="n">dgc</span><span class="o">-&gt;</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">-&gt;</span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;paths&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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&#39;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">&quot;options&quot;</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">&amp;&amp;</span> <span class="o">*</span><span class="n">options</span> <span class="o">&amp;&amp;</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">&quot;CajaDropbox::root_item&quot;</span><span class="p">,</span>
+<a name="line-722"></a> <span class="s">&quot;Dropbox&quot;</span><span class="p">,</span> <span class="s">&quot;Dropbox Options&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox&quot;</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">&quot;CajaDropbox::&quot;</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&#39;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">&lt;--- 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">&lt;--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;i&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a name="line-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">&amp;&amp;</span><span class="error2">&lt;--- 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">&quot;path&quot;</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&#39;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">&quot;path&quot;</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">&amp;</span><span class="n">paths</span><span class="p">,</span> <span class="o">&amp;</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">&lt;</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">&quot;path&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">emblem_paths</span><span class="p">);</span>
+<a name="line-832"></a> <span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;get_emblem_paths&quot;</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span><div class="verbose expandable"><span class="error2">&lt;--- 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 &quot;ERROR&quot;, 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 &quot;ERROR&quot; output go away.
+#include &lt;stdarg.h&gt;
+#include &lt;stdio.h&gt;
+
+void f(char *s, ...) {
+ va_list ap;
+ va_start(ap,s);
+ for (;;) {
+ char *p = va_arg(ap,char*);
+ printf(&quot;%018p, %s\n&quot;, p, (long)p &amp; 255 ? p : &quot;&quot;);
+ if(!p) break;
+ }
+ va_end(ap);
+}
+
+void g() {
+ char *s2 = &quot;x&quot;;
+ char *s3 = &quot;ERROR&quot;;
+
+ // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64
+ f(&quot;first&quot;, s2, s2, s2, s2, s2, 0, s3, (char*)0);
+}
+
+void h() {
+ int i;
+ volatile unsigned char a[1000];
+ for (i = 0; i&lt;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</span><span class="n">emblem_paths</span><span class="p">);</span>
+<a name="line-857"></a> <span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span> <span class="s">&quot;shell_touch&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;about to start client connection&quot;</span><span class="p">);</span>
+<a name="line-905"></a> <span class="n">dropbox_client_start</span><span class="p">(</span><span class="o">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;just checking&quot;</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">&quot;CajaDropbox&quot;</span><span class="p">,</span>
+<a name="line-955"></a> <span class="o">&amp;</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">&amp;</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">&amp;</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 &apos;file&apos; 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 &apos;i&apos; 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 &apos;emblem_paths_response&apos; 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>
+&#160;&#160;&#160;1&#160;<a href="0.html"> src/caja-dropbox.c</a><br>
+</p>
+<p>Top 10 files for style severity, total findings: 3<br>
+&#160;&#160;&#160;3&#160;<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">&nbsp;&#x25BE;</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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;sys/types.h&gt;</span><span class="cp"></span>
+<a id="line-29" name="line-29"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/socket.h&gt;</span><span class="cp"></span>
+<a id="line-30" name="line-30"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/un.h&gt;</span><span class="cp"></span>
+<a id="line-31" name="line-31"></a><span class="cp">#include</span> <span class="cpf">&lt;errno.h&gt;</span><span class="cp"></span>
+<a id="line-32" name="line-32"></a><span class="cp">#include</span> <span class="cpf">&lt;unistd.h&gt;</span><span class="cp"></span>
+<a id="line-33" name="line-33"></a><span class="cp">#include</span> <span class="cpf">&lt;ctype.h&gt;</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">&lt;glib.h&gt;</span><span class="cp"></span>
+<a id="line-36" name="line-36"></a><span class="cp">#include</span> <span class="cpf">&lt;glib/gprintf.h&gt;</span><span class="cp"></span>
+<a id="line-37" name="line-37"></a><span class="cp">#include</span> <span class="cpf">&lt;glib-object.h&gt;</span><span class="cp"></span>
+<a id="line-38" name="line-38"></a><span class="cp">#include</span> <span class="cpf">&lt;gtk/gtk.h&gt;</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">&lt;libcaja-extension/caja-extension-types.h&gt;</span><span class="cp"></span>
+<a id="line-41" name="line-41"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-menu-provider.h&gt;</span><span class="cp"></span>
+<a id="line-42" name="line-42"></a><span class="cp">#include</span> <span class="cpf">&lt;libcaja-extension/caja-info-provider.h&gt;</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">&quot;g-util.h&quot;</span><span class="cp"></span>
+<a id="line-45" name="line-45"></a><span class="cp">#include</span> <span class="cpf">&quot;dropbox-command-client.h&quot;</span><span class="cp"></span>
+<a id="line-46" name="line-46"></a><span class="cp">#include</span> <span class="cpf">&quot;caja-dropbox.h&quot;</span><span class="cp"></span>
+<a id="line-47" name="line-47"></a><span class="cp">#include</span> <span class="cpf">&quot;caja-dropbox-hooks.h&quot;</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">&quot;dropbox-uptodate&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox-syncing&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox-unsyncable&quot;</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 &#39;.&#39; and &#39;..&#39;</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">&#39;/&#39;</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">&quot;/&quot;</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">&quot;/&quot;</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">&quot;..&quot;</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">&gt;</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">&quot;.&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span> <span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&quot;resetting file %p&quot;</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&#39;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">-&gt;</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">-&gt;</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(&quot;removing %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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&#39;t do this for us, for some reason</span>
+<a id="line-176" name="line-176"></a><span class="cm"> the file&#39;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">&quot;shifty old: %s, new %s&quot;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;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">-&gt;</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">-&gt;</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(&quot;adding %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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">&quot;changed&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;path&quot;</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">&#39;/&#39;</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">&lt;--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;file&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&quot;shell touch for %s&quot;</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">-&gt;</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">&quot;gonna reset %s&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">emblems_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">-&gt;</span><span class="n">emblems_response</span><span class="p">,</span> <span class="s">&quot;emblems&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">file_status_response</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&amp;&amp;</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">-&gt;</span><span class="n">file_status_response</span><span class="p">,</span> <span class="s">&quot;status&quot;</span><span class="p">))</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&amp;&amp;</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">&amp;&amp;</span>
+<a id="line-359" name="line-359"></a> <span class="n">dficr</span><span class="o">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">folder_tag_response</span><span class="p">,</span> <span class="s">&quot;tag&quot;</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">&quot;public&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;web&quot;</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">&quot;shared&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;people&quot;</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">&quot;photos&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;photos&quot;</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">&quot;sandbox&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span> <span class="s">&quot;star&quot;</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">&quot;up to date&quot;</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">&quot;syncing&quot;</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">&quot;unsyncable&quot;</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">&gt;</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(&quot;%s to %s&quot;, 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-&gt;dfic-&gt;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;verb&quot;</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">-&gt;</span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;icon_overlay_context_action&quot;</span><span class="p">);</span>
+<a id="line-494" name="line-494"></a> <span class="n">dcac</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&#39;0&#39;</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">&#39;a&#39;</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 --&gt; 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&#39;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">&lt;</span> <span class="n">n</span> <span class="o">&amp;&amp;</span> <span class="o">*</span><span class="n">in</span> <span class="o">!=</span> <span class="sc">&#39;\0&#39;</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">&#39;%&#39;</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">&#39;\0&#39;</span><span class="p">)</span> <span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&lt;&lt;</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&#39;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">&lt;</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">&#39;\0&#39;</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">&quot;~&quot;</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">&#39;~&#39;</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">-&gt;</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">&quot;|&quot;</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">&quot;::&quot;</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">-&gt;</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">&quot;&quot;</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">-&gt;</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">&#39;!&#39;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">&quot;activate&quot;</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">&amp;</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">&amp;</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">&quot;sensitive&quot;</span><span class="p">,</span> <span class="o">&amp;</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&#39;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">&lt;</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">-&gt;</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">-&gt;</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&#39;t correctly encoded, or isn&#39;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 &quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</span><span class="n">command_name</span> <span class="o">=</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;icon_overlay_context_options&quot;</span><span class="p">);</span>
+<a id="line-682" name="line-682"></a> <span class="n">dgc</span><span class="o">-&gt;</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">-&gt;</span><span class="n">command_args</span><span class="p">,</span> <span class="n">g_strdup</span><span class="p">(</span><span class="s">&quot;paths&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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&#39;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">&quot;options&quot;</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">&amp;&amp;</span> <span class="o">*</span><span class="n">options</span> <span class="o">&amp;&amp;</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">&quot;CajaDropbox::root_item&quot;</span><span class="p">,</span>
+<a id="line-722" name="line-722"></a> <span class="s">&quot;Dropbox&quot;</span><span class="p">,</span> <span class="s">&quot;Dropbox Options&quot;</span><span class="p">,</span> <span class="s">&quot;dropbox&quot;</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">&quot;CajaDropbox::&quot;</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&#39;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">&lt;--- 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">&lt;--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;i&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&amp;&amp;</span><span class="error2">&lt;--- 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">&quot;path&quot;</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&#39;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">&quot;path&quot;</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">&amp;</span><span class="n">paths</span><span class="p">,</span> <span class="o">&amp;</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">&lt;</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">&quot;path&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;get_emblem_paths&quot;</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span><div class="verbose expandable"><span class="error2">&lt;--- 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 &quot;ERROR&quot;, 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 &quot;ERROR&quot; output go away.
+#include &lt;stdarg.h&gt;
+#include &lt;stdio.h&gt;
+
+void f(char *s, ...) {
+ va_list ap;
+ va_start(ap,s);
+ for (;;) {
+ char *p = va_arg(ap,char*);
+ printf(&quot;%018p, %s\n&quot;, p, (long)p &amp; 255 ? p : &quot;&quot;);
+ if(!p) break;
+ }
+ va_end(ap);
+}
+
+void g() {
+ char *s2 = &quot;x&quot;;
+ char *s3 = &quot;ERROR&quot;;
+
+ // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64
+ f(&quot;first&quot;, s2, s2, s2, s2, s2, 0, s3, (char*)0);
+}
+
+void h() {
+ int i;
+ volatile unsigned char a[1000];
+ for (i = 0; i&lt;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</span><span class="n">dc</span><span class="p">.</span><span class="n">hookserv</span><span class="p">),</span> <span class="s">&quot;shell_touch&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;about to start client connection&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;just checking&quot;</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">&quot;CajaDropbox&quot;</span><span class="p">,</span>
+<a id="line-955" name="line-955"></a> <span class="o">&amp;</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">&amp;</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">&amp;</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 &apos;file&apos; 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 &apos;i&apos; 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 &apos;emblem_paths_response&apos; 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>
+&#160;&#160;&#160;1&#160;<a href="0.html"> src/caja-dropbox.c</a><br>
+</p>
+<p>Top 10 files for style severity, total findings: 3<br>
+&#160;&#160;&#160;3&#160;<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">&nbsp;&#x25BE;</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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;sys/types.h&gt;</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">&lt;sys/socket.h&gt;</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">&lt;sys/un.h&gt;</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">&lt;errno.h&gt;</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">&lt;unistd.h&gt;</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">&lt;ctype.h&gt;</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">&lt;glib.h&gt;</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">&lt;glib/gprintf.h&gt;</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">&lt;glib-object.h&gt;</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">&lt;gtk/gtk.h&gt;</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">&lt;libcaja-extension/caja-extension-types.h&gt;</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">&lt;libcaja-extension/caja-menu-provider.h&gt;</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">&lt;libcaja-extension/caja-info-provider.h&gt;</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">&quot;g-util.h&quot;</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">&quot;dropbox-command-client.h&quot;</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">&quot;caja-dropbox.h&quot;</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">&quot;caja-dropbox-hooks.h&quot;</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">&quot;dropbox-uptodate&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-syncing&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-unsyncable&quot;</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 &#39;.&#39; and &#39;..&#39;</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">&#39;/&#39;</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">&quot;/&quot;</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">&quot;/&quot;</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">&quot;..&quot;</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">&gt;</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">&quot;.&quot;</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">&amp;&amp;</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">&#39;\0&#39;</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">&quot;resetting file %p&quot;</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&#39;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">-&gt;</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">-&gt;</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(&quot;removing %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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&#39;t do this for us, for some reason</span>
+<a id="line-176" name="line-176"></a><span class="cm"> the file&#39;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">&quot;shifty old: %s, new %s&quot;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;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">-&gt;</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">-&gt;</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(&quot;adding %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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">&quot;changed&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;path&quot;</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">&amp;&amp;</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">&#39;/&#39;</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">&lt;--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;file&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&quot;shell touch for %s&quot;</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">-&gt;</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">&quot;gonna reset %s&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;emblems&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;status&quot;</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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;tag&quot;</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">&quot;public&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;web&quot;</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">&quot;shared&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;people&quot;</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">&quot;photos&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;photos&quot;</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">&quot;sandbox&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;star&quot;</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">&quot;up to date&quot;</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">&quot;syncing&quot;</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">&quot;unsyncable&quot;</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">&gt;</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(&quot;%s to %s&quot;, 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-&gt;dfic-&gt;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">&quot;verb&quot;</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">-&gt;</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">&quot;icon_overlay_context_action&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&#39;0&#39;</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">&#39;a&#39;</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 --&gt; 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&#39;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">&lt;</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&#39;%&#39;</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">&#39;\0&#39;</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&lt;&lt;</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&#39;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">&lt;</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">&#39;\0&#39;</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">&quot;~&quot;</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">&#39;~&#39;</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">-&gt;</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">&quot;|&quot;</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">&quot;::&quot;</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">-&gt;</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">&quot;&quot;</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">-&gt;</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">&#39;!&#39;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">&quot;activate&quot;</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">&amp;</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">&amp;</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">&quot;sensitive&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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&#39;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">&lt;</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">-&gt;</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">-&gt;</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&#39;t correctly encoded, or isn&#39;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 &quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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&#39;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">&quot;options&quot;</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">&amp;&amp;</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&amp;&amp;</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">&quot;CajaDropbox::root_item&quot;</span><span class="p">,</span><span class="w"></span>
+<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">&quot;Dropbox&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Dropbox Options&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox&quot;</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">&quot;CajaDropbox::&quot;</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&#39;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">&lt;--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;i&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&amp;&amp;</span><span class="w"></span><span class="error2">&lt;--- 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">&quot;path&quot;</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&#39;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">&quot;path&quot;</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">&amp;</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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">&lt;</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">&quot;path&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;get_emblem_paths&quot;</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">&lt;--- 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 &quot;ERROR&quot;, 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 &quot;ERROR&quot; output go away.
+#include &lt;stdarg.h&gt;
+#include &lt;stdio.h&gt;
+
+void f(char *s, ...) {
+ va_list ap;
+ va_start(ap,s);
+ for (;;) {
+ char *p = va_arg(ap,char*);
+ printf(&quot;%018p, %s\n&quot;, p, (long)p &amp; 255 ? p : &quot;&quot;);
+ if(!p) break;
+ }
+ va_end(ap);
+}
+
+void g() {
+ char *s2 = &quot;x&quot;;
+ char *s3 = &quot;ERROR&quot;;
+
+ // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64
+ f(&quot;first&quot;, s2, s2, s2, s2, s2, 0, s3, (char*)0);
+}
+
+void h() {
+ int i;
+ volatile unsigned char a[1000];
+ for (i = 0; i&lt;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;shell_touch&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;about to start client connection&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;just checking&quot;</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">&quot;CajaDropbox&quot;</span><span class="p">,</span><span class="w"></span>
+<a id="line-955" name="line-955"></a><span class="w"> </span><span class="o">&amp;</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">&amp;</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">&amp;</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 &apos;file&apos; 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 &apos;i&apos; 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 &apos;emblem_paths_response&apos; 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>
+&#160;&#160;&#160;1&#160;<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>
+&#160;&#160;&#160;3&#160;<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">&nbsp;&#x25BE;</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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;sys/types.h&gt;</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">&lt;sys/socket.h&gt;</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">&lt;sys/un.h&gt;</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">&lt;errno.h&gt;</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">&lt;unistd.h&gt;</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">&lt;ctype.h&gt;</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">&lt;glib.h&gt;</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">&lt;glib/gprintf.h&gt;</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">&lt;glib-object.h&gt;</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">&lt;gtk/gtk.h&gt;</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">&lt;libcaja-extension/caja-extension-types.h&gt;</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">&lt;libcaja-extension/caja-menu-provider.h&gt;</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">&lt;libcaja-extension/caja-info-provider.h&gt;</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">&quot;g-util.h&quot;</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">&quot;dropbox-command-client.h&quot;</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">&quot;caja-dropbox.h&quot;</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">&quot;caja-dropbox-hooks.h&quot;</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">&quot;dropbox-uptodate&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-syncing&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-unsyncable&quot;</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 &#39;.&#39; and &#39;..&#39;</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">&#39;/&#39;</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">&quot;/&quot;</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">&quot;/&quot;</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">&quot;..&quot;</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">&gt;</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">&quot;.&quot;</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">&amp;&amp;</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">&#39;\0&#39;</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">&quot;resetting file %p&quot;</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&#39;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">-&gt;</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">-&gt;</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(&quot;removing %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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&#39;t do this for us, for some reason</span>
+<a id="line-176" name="line-176"></a><span class="cm"> the file&#39;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">&quot;shifty old: %s, new %s&quot;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;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">-&gt;</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">-&gt;</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(&quot;adding %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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">&quot;changed&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;path&quot;</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">&amp;&amp;</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">&#39;/&#39;</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">&lt;--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;file&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&quot;shell touch for %s&quot;</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">-&gt;</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">&quot;gonna reset %s&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;emblems&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;status&quot;</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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;tag&quot;</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">&quot;public&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;web&quot;</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">&quot;shared&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;people&quot;</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">&quot;photos&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;photos&quot;</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">&quot;sandbox&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;star&quot;</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">&quot;up to date&quot;</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">&quot;syncing&quot;</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">&quot;unsyncable&quot;</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">&gt;</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(&quot;%s to %s&quot;, 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-&gt;dfic-&gt;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">&quot;verb&quot;</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">-&gt;</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">&quot;icon_overlay_context_action&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&#39;0&#39;</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">&#39;a&#39;</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 --&gt; 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&#39;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">&lt;</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&#39;%&#39;</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">&#39;\0&#39;</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&lt;&lt;</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&#39;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">&lt;</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">&#39;\0&#39;</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">&quot;~&quot;</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">&#39;~&#39;</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">-&gt;</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">&quot;|&quot;</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">&quot;::&quot;</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">-&gt;</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">&quot;&quot;</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">-&gt;</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">&#39;!&#39;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">&quot;activate&quot;</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">&amp;</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">&amp;</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">&quot;sensitive&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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&#39;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">&lt;</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">-&gt;</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">-&gt;</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&#39;t correctly encoded, or isn&#39;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 &quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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&#39;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">&quot;options&quot;</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">&amp;&amp;</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&amp;&amp;</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">&quot;CajaDropbox::root_item&quot;</span><span class="p">,</span><span class="w"></span>
+<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">&quot;Dropbox&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Dropbox Options&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox&quot;</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">&quot;CajaDropbox::&quot;</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&#39;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">&lt;--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;i&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&amp;&amp;</span><span class="w"></span><span class="error2">&lt;--- 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">&quot;path&quot;</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&#39;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">&quot;path&quot;</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">&amp;</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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">&lt;</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">&quot;path&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;get_emblem_paths&quot;</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">&lt;--- 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 &quot;ERROR&quot;, 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 &quot;ERROR&quot; output go away.
+#include &lt;stdarg.h&gt;
+#include &lt;stdio.h&gt;
+
+void f(char *s, ...) {
+ va_list ap;
+ va_start(ap,s);
+ for (;;) {
+ char *p = va_arg(ap,char*);
+ printf(&quot;%018p, %s\n&quot;, p, (long)p &amp; 255 ? p : &quot;&quot;);
+ if(!p) break;
+ }
+ va_end(ap);
+}
+
+void g() {
+ char *s2 = &quot;x&quot;;
+ char *s3 = &quot;ERROR&quot;;
+
+ // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64
+ f(&quot;first&quot;, s2, s2, s2, s2, s2, 0, s3, (char*)0);
+}
+
+void h() {
+ int i;
+ volatile unsigned char a[1000];
+ for (i = 0; i&lt;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;shell_touch&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;about to start client connection&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;just checking&quot;</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">&quot;CajaDropbox&quot;</span><span class="p">,</span><span class="w"></span>
+<a id="line-955" name="line-955"></a><span class="w"> </span><span class="o">&amp;</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">&amp;</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">&amp;</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 &apos;file&apos; 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 &apos;i&apos; 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 &apos;emblem_paths_response&apos; 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>
+&#160;&#160;&#160;1&#160;<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>
+&#160;&#160;&#160;3&#160;<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">&nbsp;&#x25BE;</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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;sys/types.h&gt;</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">&lt;sys/socket.h&gt;</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">&lt;sys/un.h&gt;</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">&lt;errno.h&gt;</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">&lt;unistd.h&gt;</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">&lt;ctype.h&gt;</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">&lt;glib.h&gt;</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">&lt;glib/gprintf.h&gt;</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">&lt;glib-object.h&gt;</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">&lt;gtk/gtk.h&gt;</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">&lt;libcaja-extension/caja-extension-types.h&gt;</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">&lt;libcaja-extension/caja-menu-provider.h&gt;</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">&lt;libcaja-extension/caja-info-provider.h&gt;</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">&quot;g-util.h&quot;</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">&quot;dropbox-command-client.h&quot;</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">&quot;caja-dropbox.h&quot;</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">&quot;caja-dropbox-hooks.h&quot;</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">&quot;dropbox-uptodate&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-syncing&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-unsyncable&quot;</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 &#39;.&#39; and &#39;..&#39;</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">&#39;/&#39;</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">&quot;/&quot;</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">&quot;/&quot;</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">&quot;..&quot;</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">&gt;</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">&quot;.&quot;</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">&amp;&amp;</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">&#39;\0&#39;</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">&quot;resetting file %p&quot;</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&#39;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">-&gt;</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">-&gt;</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(&quot;removing %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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&#39;t do this for us, for some reason</span>
+<a id="line-176" name="line-176"></a><span class="cm"> the file&#39;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">&quot;shifty old: %s, new %s&quot;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;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">-&gt;</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">-&gt;</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(&quot;adding %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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">&quot;changed&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;path&quot;</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">&amp;&amp;</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">&#39;/&#39;</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">&lt;--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;file&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&quot;shell touch for %s&quot;</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">-&gt;</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">&quot;gonna reset %s&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;emblems&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;status&quot;</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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;tag&quot;</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">&quot;public&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;web&quot;</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">&quot;shared&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;people&quot;</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">&quot;photos&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;photos&quot;</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">&quot;sandbox&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;star&quot;</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">&quot;up to date&quot;</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">&quot;syncing&quot;</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">&quot;unsyncable&quot;</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">&gt;</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(&quot;%s to %s&quot;, 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-&gt;dfic-&gt;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">&quot;verb&quot;</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">-&gt;</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">&quot;icon_overlay_context_action&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&#39;0&#39;</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">&#39;a&#39;</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 --&gt; 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&#39;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">&lt;</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&#39;%&#39;</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">&#39;\0&#39;</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&lt;&lt;</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&#39;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">&lt;</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">&#39;\0&#39;</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">&quot;~&quot;</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">&#39;~&#39;</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">-&gt;</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">&quot;|&quot;</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">&quot;::&quot;</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">-&gt;</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">&quot;&quot;</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">-&gt;</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">&#39;!&#39;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">&quot;activate&quot;</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">&amp;</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">&amp;</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">&quot;sensitive&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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&#39;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">&lt;</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">-&gt;</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">-&gt;</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&#39;t correctly encoded, or isn&#39;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 &quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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&#39;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">&quot;options&quot;</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">&amp;&amp;</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&amp;&amp;</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">&quot;CajaDropbox::root_item&quot;</span><span class="p">,</span><span class="w"></span>
+<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">&quot;Dropbox&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Dropbox Options&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox&quot;</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">&quot;CajaDropbox::&quot;</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&#39;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">&lt;--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;i&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&amp;&amp;</span><span class="w"></span><span class="error2">&lt;--- 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">&quot;path&quot;</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&#39;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">&quot;path&quot;</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">&amp;</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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">&lt;</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">&quot;path&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;get_emblem_paths&quot;</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">&lt;--- 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 &quot;ERROR&quot;, 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 &quot;ERROR&quot; output go away.
+#include &lt;stdarg.h&gt;
+#include &lt;stdio.h&gt;
+
+void f(char *s, ...) {
+ va_list ap;
+ va_start(ap,s);
+ for (;;) {
+ char *p = va_arg(ap,char*);
+ printf(&quot;%018p, %s\n&quot;, p, (long)p &amp; 255 ? p : &quot;&quot;);
+ if(!p) break;
+ }
+ va_end(ap);
+}
+
+void g() {
+ char *s2 = &quot;x&quot;;
+ char *s3 = &quot;ERROR&quot;;
+
+ // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64
+ f(&quot;first&quot;, s2, s2, s2, s2, s2, 0, s3, (char*)0);
+}
+
+void h() {
+ int i;
+ volatile unsigned char a[1000];
+ for (i = 0; i&lt;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;shell_touch&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;about to start client connection&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;just checking&quot;</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">&quot;CajaDropbox&quot;</span><span class="p">,</span><span class="w"></span>
+<a id="line-955" name="line-955"></a><span class="w"> </span><span class="o">&amp;</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">&amp;</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">&amp;</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 &apos;file&apos; 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 &apos;i&apos; 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 &apos;emblem_paths_response&apos; 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>
+&#160;&#160;&#160;1&#160;<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>
+&#160;&#160;&#160;3&#160;<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">&nbsp;&#x25BE;</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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;sys/types.h&gt;</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">&lt;sys/socket.h&gt;</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">&lt;sys/un.h&gt;</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">&lt;errno.h&gt;</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">&lt;unistd.h&gt;</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">&lt;ctype.h&gt;</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">&lt;glib.h&gt;</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">&lt;glib/gprintf.h&gt;</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">&lt;glib-object.h&gt;</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">&lt;gtk/gtk.h&gt;</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">&lt;libcaja-extension/caja-extension-types.h&gt;</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">&lt;libcaja-extension/caja-menu-provider.h&gt;</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">&lt;libcaja-extension/caja-info-provider.h&gt;</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">&quot;g-util.h&quot;</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">&quot;dropbox-command-client.h&quot;</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">&quot;caja-dropbox.h&quot;</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">&quot;caja-dropbox-hooks.h&quot;</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">&quot;dropbox-uptodate&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-syncing&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-unsyncable&quot;</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 &#39;.&#39; and &#39;..&#39;</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">&#39;/&#39;</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">&quot;/&quot;</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">&quot;/&quot;</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">&quot;..&quot;</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">&gt;</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">&quot;.&quot;</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">&amp;&amp;</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">&#39;\0&#39;</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">&quot;resetting file %p&quot;</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&#39;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">-&gt;</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">-&gt;</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(&quot;removing %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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&#39;t do this for us, for some reason</span>
+<a id="line-176" name="line-176"></a><span class="cm"> the file&#39;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">&quot;shifty old: %s, new %s&quot;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;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">-&gt;</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">-&gt;</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(&quot;adding %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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">&quot;changed&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;path&quot;</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">&amp;&amp;</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">&#39;/&#39;</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">&lt;--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;file&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&quot;shell touch for %s&quot;</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">-&gt;</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">&quot;gonna reset %s&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;emblems&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;status&quot;</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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;tag&quot;</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">&quot;public&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;web&quot;</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">&quot;shared&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;people&quot;</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">&quot;photos&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;photos&quot;</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">&quot;sandbox&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;star&quot;</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">&quot;up to date&quot;</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">&quot;syncing&quot;</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">&quot;unsyncable&quot;</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">&gt;</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(&quot;%s to %s&quot;, 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-&gt;dfic-&gt;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">&quot;verb&quot;</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">-&gt;</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">&quot;icon_overlay_context_action&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&#39;0&#39;</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">&#39;a&#39;</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 --&gt; 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&#39;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">&lt;</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&#39;%&#39;</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">&#39;\0&#39;</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&lt;&lt;</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&#39;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">&lt;</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">&#39;\0&#39;</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">&quot;~&quot;</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">&#39;~&#39;</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">-&gt;</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">&quot;|&quot;</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">&quot;::&quot;</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">-&gt;</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">&quot;&quot;</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">-&gt;</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">&#39;!&#39;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">&quot;activate&quot;</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">&amp;</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">&amp;</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">&quot;sensitive&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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&#39;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">&lt;</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">-&gt;</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">-&gt;</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&#39;t correctly encoded, or isn&#39;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 &quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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&#39;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">&quot;options&quot;</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">&amp;&amp;</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&amp;&amp;</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">&quot;CajaDropbox::root_item&quot;</span><span class="p">,</span><span class="w"></span>
+<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">&quot;Dropbox&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Dropbox Options&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox&quot;</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">&quot;CajaDropbox::&quot;</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&#39;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">&lt;--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;i&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&amp;&amp;</span><span class="w"></span><span class="error2">&lt;--- 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">&quot;path&quot;</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&#39;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">&quot;path&quot;</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">&amp;</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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">&lt;</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">&quot;path&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;get_emblem_paths&quot;</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">&lt;--- 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 &quot;ERROR&quot;, 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 &quot;ERROR&quot; output go away.
+#include &lt;stdarg.h&gt;
+#include &lt;stdio.h&gt;
+
+void f(char *s, ...) {
+ va_list ap;
+ va_start(ap,s);
+ for (;;) {
+ char *p = va_arg(ap,char*);
+ printf(&quot;%018p, %s\n&quot;, p, (long)p &amp; 255 ? p : &quot;&quot;);
+ if(!p) break;
+ }
+ va_end(ap);
+}
+
+void g() {
+ char *s2 = &quot;x&quot;;
+ char *s3 = &quot;ERROR&quot;;
+
+ // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64
+ f(&quot;first&quot;, s2, s2, s2, s2, s2, 0, s3, (char*)0);
+}
+
+void h() {
+ int i;
+ volatile unsigned char a[1000];
+ for (i = 0; i&lt;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;shell_touch&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;about to start client connection&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;just checking&quot;</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">&quot;CajaDropbox&quot;</span><span class="p">,</span><span class="w"></span>
+<a id="line-955" name="line-955"></a><span class="w"> </span><span class="o">&amp;</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">&amp;</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">&amp;</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 &apos;file&apos; 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 &apos;i&apos; 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 &apos;emblem_paths_response&apos; 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>
+&#160;&#160;&#160;1&#160;<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>
+&#160;&#160;&#160;3&#160;<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">&nbsp;&#x25BE;</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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="826"><td class="num" id="LN826">826</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;command_name = g_strdup(command);</td></tr>
+<tr class="codeline" data-linenumber="848"><td class="num" id="LN848">848</td><td class="line"> dgc-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;sys/types.h&gt;</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">&lt;sys/socket.h&gt;</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">&lt;sys/un.h&gt;</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">&lt;errno.h&gt;</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">&lt;unistd.h&gt;</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">&lt;ctype.h&gt;</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">&lt;glib.h&gt;</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">&lt;glib/gprintf.h&gt;</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">&lt;glib-object.h&gt;</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">&lt;gtk/gtk.h&gt;</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">&lt;libcaja-extension/caja-extension-types.h&gt;</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">&lt;libcaja-extension/caja-menu-provider.h&gt;</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">&lt;libcaja-extension/caja-info-provider.h&gt;</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">&quot;g-util.h&quot;</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">&quot;dropbox-command-client.h&quot;</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">&quot;caja-dropbox.h&quot;</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">&quot;caja-dropbox-hooks.h&quot;</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">&quot;dropbox-uptodate&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-syncing&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-unsyncable&quot;</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 &#39;.&#39; and &#39;..&#39;</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">&#39;/&#39;</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">&quot;/&quot;</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">&quot;/&quot;</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">&quot;..&quot;</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">&gt;</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">&quot;.&quot;</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">&amp;&amp;</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">&#39;\0&#39;</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">&quot;resetting file %p&quot;</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&#39;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">-&gt;</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">-&gt;</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(&quot;removing %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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&#39;t do this for us, for some reason</span>
+<a id="line-176" name="line-176"></a><span class="cm"> the file&#39;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">&quot;shifty old: %s, new %s&quot;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;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">-&gt;</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">-&gt;</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(&quot;adding %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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">&quot;changed&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;path&quot;</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">&amp;&amp;</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">&#39;/&#39;</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">&lt;--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;file&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&quot;shell touch for %s&quot;</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">-&gt;</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">&quot;gonna reset %s&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;emblems&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;status&quot;</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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;tag&quot;</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">&quot;public&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;web&quot;</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">&quot;shared&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;people&quot;</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">&quot;photos&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;photos&quot;</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">&quot;sandbox&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;star&quot;</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">&quot;up to date&quot;</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">&quot;syncing&quot;</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">&quot;unsyncable&quot;</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">&gt;</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(&quot;%s to %s&quot;, 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-&gt;dfic-&gt;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">&quot;verb&quot;</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">-&gt;</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">&quot;icon_overlay_context_action&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&#39;0&#39;</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">&#39;a&#39;</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 --&gt; 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&#39;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">&lt;</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&#39;%&#39;</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">&#39;\0&#39;</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&lt;&lt;</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&#39;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">&lt;</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">&#39;\0&#39;</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">&quot;~&quot;</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">&#39;~&#39;</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">-&gt;</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">&quot;|&quot;</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">&quot;::&quot;</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">-&gt;</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">&quot;&quot;</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">-&gt;</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">&#39;!&#39;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">&quot;activate&quot;</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">&amp;</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">&amp;</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">&quot;sensitive&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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&#39;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">&lt;</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">-&gt;</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">-&gt;</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&#39;t correctly encoded, or isn&#39;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 &quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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&#39;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">&quot;options&quot;</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">&amp;&amp;</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&amp;&amp;</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">&quot;CajaDropbox::root_item&quot;</span><span class="p">,</span><span class="w"></span>
+<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">&quot;Dropbox&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Dropbox Options&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox&quot;</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">&quot;CajaDropbox::&quot;</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&#39;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">&lt;--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;i&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&amp;&amp;</span><span class="w"></span><span class="error2">&lt;--- 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">&quot;path&quot;</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&#39;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">&quot;path&quot;</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">&amp;</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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">&lt;</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">&quot;path&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;get_emblem_paths&quot;</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">&lt;--- 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 &quot;ERROR&quot;, 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 &quot;ERROR&quot; output go away.
+#include &lt;stdarg.h&gt;
+#include &lt;stdio.h&gt;
+
+void f(char *s, ...) {
+ va_list ap;
+ va_start(ap,s);
+ for (;;) {
+ char *p = va_arg(ap,char*);
+ printf(&quot;%018p, %s\n&quot;, p, (long)p &amp; 255 ? p : &quot;&quot;);
+ if(!p) break;
+ }
+ va_end(ap);
+}
+
+void g() {
+ char *s2 = &quot;x&quot;;
+ char *s3 = &quot;ERROR&quot;;
+
+ // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64
+ f(&quot;first&quot;, s2, s2, s2, s2, s2, 0, s3, (char*)0);
+}
+
+void h() {
+ int i;
+ volatile unsigned char a[1000];
+ for (i = 0; i&lt;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;shell_touch&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;about to start client connection&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;just checking&quot;</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">&quot;CajaDropbox&quot;</span><span class="p">,</span><span class="w"></span>
+<a id="line-956" name="line-956"></a><span class="w"> </span><span class="o">&amp;</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">&amp;</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">&amp;</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 &apos;file&apos; 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 &apos;i&apos; 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 &apos;emblem_paths_response&apos; 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>
+&#160;&#160;&#160;1&#160;<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>
+&#160;&#160;&#160;3&#160;<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">&nbsp;&#x25BE;</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 &lt;http://www.gnu.org/licenses/&gt;.</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 &lt;sys/types.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="25"><td class="num" id="LN25">25</td><td class="line"><span class='directive'>#include &lt;sys/socket.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="26"><td class="num" id="LN26">26</td><td class="line"><span class='directive'>#include &lt;sys/un.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="27"><td class="num" id="LN27">27</td><td class="line"><span class='directive'>#include &lt;<span class='macro'>errno<span class='macro_popup'>(*__errno_location ())</span></span>.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="28"><td class="num" id="LN28">28</td><td class="line"><span class='directive'>#include &lt;unistd.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="29"><td class="num" id="LN29">29</td><td class="line"><span class='directive'>#include &lt;fcntl.h&gt;</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 &lt;stdarg.h&gt;</span></td></tr>
+<tr class="codeline" data-linenumber="32"><td class="num" id="LN32">32</td><td class="line"><span class='directive'>#include &lt;string.h&gt;</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 &lt;glib.h&gt;</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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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-&gt;dcc-&gt;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))-&gt;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-&gt;data);</td></tr>
+<tr class="codeline" data-linenumber="86"><td class="num" id="LN86">86</td><td class="line"> dccca-&gt;h(ca-&gt;connect_attempt, dccca-&gt;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 &gt;= 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, &amp;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"> &amp;term_pos, &amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="181"><td class="num" id="LN181">181</td><td class="line"> <span class='directive'>&amp;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, &amp;bytes_trans, \</span></td></tr>
+<tr class="codeline" data-linenumber="194"><td class="num" id="LN194">194</td><td class="line"> <span class='directive'>&amp;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))-&gt;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-&gt;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-&gt;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, &amp;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, &amp;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>, &amp;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, &amp;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, &amp;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>, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="419"><td class="num" id="LN419">419</td><td class="line"> dficr-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;handler(dgcr-&gt;response, dgcr-&gt;dgc-&gt;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-&gt;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-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;dgc-&gt;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-&gt;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-&gt;command_name,</td></tr>
+<tr class="codeline" data-linenumber="457"><td class="num" id="LN457">457</td><td class="line"> dcac-&gt;command_args, &amp;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dcac;</td></tr>
+<tr class="codeline" data-linenumber="469"><td class="num" id="LN469">469</td><td class="line"> dgcr-&gt;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"> &amp;bytes_read, &amp;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 != &amp;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dfic = dfic;</td></tr>
+<tr class="codeline" data-linenumber="517"><td class="num" id="LN517">517</td><td class="line"> dficr-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;=<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-&gt;dgc = dgc;</td></tr>
+<tr class="codeline" data-linenumber="526"><td class="num" id="LN526">526</td><td class="line"> dgcr-&gt;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 &gt; (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 &gt; 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"> &amp;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 &gt; 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"> &amp;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)) &lt; 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>) &lt; 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 *) &amp;addr, addr_len) &lt; 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(&amp;writers)<span class='macro_popup'>do { unsigned int __i; fd_set *__arr = (&amp;writers); for (__i<br> = 0; __i &lt; sizeof (fd_set) / sizeof (__fd_mask); ++__i) (<br>(__arr)-&gt;__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, &amp;writers)<span class='macro_popup'>((void) (((&amp;writers)-&gt;__fds_bits)[((sock) / (8 * (int)<br> sizeof (__fd_mask)))] |= ((__fd_mask) (1UL &lt;&lt; ((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>, &amp;writers, <span class='macro'>NULL<span class='macro_popup'>((void*)0)</span></span>, &amp;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 *) &amp;addr, addr_len) &lt; 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) &lt; 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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dcc = dcc;</td></tr>
+<tr class="codeline" data-linenumber="627"><td class="num" id="LN627">627</td><td class="line"> ca-&gt;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 &gt;= 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(&amp;(dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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-&gt;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 == &amp;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-&gt;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, &amp;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, &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="736"><td class="num" id="LN736">736</td><td class="line"> command_connected = dcc-&gt;command_connected;</td></tr>
+<tr class="codeline" data-linenumber="737"><td class="num" id="LN737">737</td><td class="line"> g_mutex_unlock(&amp;(dcc-&gt;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 *) &amp;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-&gt;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-&gt;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(&amp;(dcc-&gt;command_connected_mutex));</td></tr>
+<tr class="codeline" data-linenumber="761"><td class="num" id="LN761">761</td><td class="line"> dcc-&gt;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-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="775"><td class="num" id="LN775">775</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="776"><td class="num" id="LN776">776</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;ondisconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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(&amp;(dcc-&gt;onconnect_hooklist));</td></tr>
+<tr class="codeline" data-linenumber="788"><td class="num" id="LN788">788</td><td class="line"> newhook-&gt;func = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="789"><td class="num" id="LN789">789</td><td class="line"> newhook-&gt;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(&amp;(dcc-&gt;onconnect_hooklist), newhook)<span class='macro_popup'>g_hook_insert_before ((&amp;(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (<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-&gt;h = dhcch;</td></tr>
+<tr class="codeline" data-linenumber="804"><td class="num" id="LN804">804</td><td class="line"> newhook-&gt;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-&gt;ca_hooklist = g_list_append(dcc-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="825"><td class="num" id="LN825">825</td><td class="line"> dgc-&gt;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-&gt;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-&gt;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-&gt;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) &amp;&amp; (__s == 0 || __n &lt;= (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-&gt;dc.request_type = GENERAL_COMMAND;</td></tr>
+<tr class="codeline" data-linenumber="847"><td class="num" id="LN847">847</td><td class="line"> dgc-&gt;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-&gt;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-&gt;handler = h;</td></tr>
+<tr class="codeline" data-linenumber="857"><td class="num" id="LN857">857</td><td class="line"> dgc-&gt;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) &amp;&amp; (__s ==<br> 0 || __n &lt;= (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-&gt;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 ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+ 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;sys/types.h&gt;</span><span class="error2">&lt;--- 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">&lt;sys/socket.h&gt;</span><span class="error2">&lt;--- 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">&lt;sys/un.h&gt;</span><span class="error2">&lt;--- 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">&lt;errno.h&gt;</span><span class="error2">&lt;--- 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">&lt;unistd.h&gt;</span><span class="error2">&lt;--- 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">&lt;fcntl.h&gt;</span><span class="error2">&lt;--- 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">&lt;string.h&gt;</span><span class="error2">&lt;--- 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">&lt;glib.h&gt;</span><span class="error2">&lt;--- 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">&quot;g-util.h&quot;</span>
+<a id="line-36" name="line-36"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;async-io-coroutine.h&quot;</span>
+<a id="line-37" name="line-37"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;dropbox-client-util.h&quot;</span>
+<a id="line-38" name="line-38"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;caja-dropbox-hooks.h&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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(&quot;got a hook name: %s&quot;, hookserv-&gt;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 &quot;done&quot; */</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">-&gt;</span><span class="n">hhsi</span><span class="p">.</span><span class="n">numargs</span><span class="w"> </span><span class="o">&gt;=</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">-&gt;</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">&quot;done&quot;</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">-&gt;</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">&quot;bad parse&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">hook</span><span class="p">)(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;hook client disconnected&quot;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&lt;</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">-&gt;</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">&lt;</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">&quot;%s/.dropbox/iface_socket&quot;</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">-&gt;</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">&amp;</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">&lt;</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">&amp;</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">-&gt;</span><span class="n">socket</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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">-&gt;</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">&amp;</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">&amp;</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">-&gt;</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">&amp;</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">&lt;</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">&quot;couldn&#39;t connect to hook server after 1 second&quot;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">chan</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</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">-&gt;</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(&quot;create channel&quot;); */</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">-&gt;</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">-&gt;</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">-&gt;</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(&quot;set non blocking&quot;); */</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;hook client connected&quot;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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(&quot;added watch&quot;);*/</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">-&gt;</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">&quot;forcing hook to reconnect&quot;</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">-&gt;</span><span class="n">event_source</span><span class="w"> </span><span class="o">&gt;=</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">-&gt;</span><span class="n">event_source</span><span class="w"> </span><span class="o">&gt;</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">-&gt;</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">-&gt;</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">&quot;event source was zero!!!!!&quot;</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">&lt;--- 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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">hookserv</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;glib.h&gt;</span><span class="error2">&lt;--- 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">&lt;glib/gprintf.h&gt;</span><span class="error2">&lt;--- 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(&quot;Entering &quot;); g_print(__FUNCTION__); g_printf(&quot;\n&quot;);}</span>
+<a id="line-35" name="line-35"></a><span class="cp">#define debug(format, ...) {g_print(__FUNCTION__); g_print(&quot;: &quot;); \</span>
+<a id="line-36" name="line-36"></a><span class="cp"> g_printf(format, ## __VA_ARGS__); g_print(&quot;\n&quot;);}</span>
+<a id="line-37" name="line-37"></a><span class="cp">#define debug_return(v) {g_print(&quot;Exiting &quot;); g_print(__FUNCTION__); g_printf(&quot;\n&quot;); 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;sys/types.h&gt;</span><span class="error2">&lt;--- 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">&lt;sys/socket.h&gt;</span><span class="error2">&lt;--- 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">&lt;sys/un.h&gt;</span><span class="error2">&lt;--- 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">&lt;errno.h&gt;</span><span class="error2">&lt;--- 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">&lt;unistd.h&gt;</span><span class="error2">&lt;--- 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">&lt;fcntl.h&gt;</span><span class="error2">&lt;--- 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">&lt;stdarg.h&gt;</span><span class="error2">&lt;--- 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">&lt;string.h&gt;</span><span class="error2">&lt;--- 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">&lt;glib.h&gt;</span><span class="error2">&lt;--- 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">&quot;g-util.h&quot;</span>
+<a id="line-37" name="line-37"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;dropbox-client-util.h&quot;</span>
+<a id="line-38" name="line-38"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;dropbox-command-client.h&quot;</span>
+<a id="line-39" name="line-39"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;caja-dropbox.h&quot;</span>
+<a id="line-40" name="line-40"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;caja-dropbox-hooks.h&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dcc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">h</span><span class="p">(</span><span class="n">ca</span><span class="o">-&gt;</span><span class="n">connect_attempt</span><span class="p">,</span><span class="w"> </span><span class="n">dccca</span><span class="o">-&gt;</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">&gt;=</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">&quot;malicious connection&quot;</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">&quot;malicious connection&quot;</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">&amp;</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">&amp;</span><span class="n">term_pos</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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">&quot;connection closed&quot;</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">&quot;connection closed&quot;</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">&#39;\0&#39;</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">&quot;done&quot;</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">&quot;parse error&quot;</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">&quot;parse error&quot;</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&#39;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, &amp;bytes_trans, \</span>
+<a id="line-181" name="line-181"></a><span class="cp"> &amp;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, &amp;bytes_trans, \</span>
+<a id="line-194" name="line-194"></a><span class="cp"> &amp;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">&quot;</span><span class="se">\n</span><span class="s">&quot;</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">-&gt;</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">-&gt;</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">&quot;</span><span class="se">\t</span><span class="s">&quot;</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">&quot;</span><span class="se">\n</span><span class="s">&quot;</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">&quot;done</span><span class="se">\n</span><span class="s">&quot;</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">&amp;</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">&amp;</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">&amp;</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">&quot;dropbox command connection timed out&quot;</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">&quot;dropbox command connection timed out&quot;</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">&quot;dropbox command connection closed&quot;</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">&quot;dropbox command connection closed&quot;</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">&quot;ok</span><span class="se">\n</span><span class="s">&quot;</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">&amp;</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">&amp;</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">&amp;</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">&quot;dropbox command connection timed out&quot;</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">&quot;dropbox command connection timed out&quot;</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">&quot;dropbox command connection closed&quot;</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">&quot;dropbox command connection closed&quot;</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">&quot;done</span><span class="se">\n</span><span class="s">&quot;</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">-&gt;</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&#39;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">&quot;file wasn&#39;t correctly encoded %s&quot;</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&#39;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">&quot;path&quot;</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">&quot;get_emblems&quot;</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&#39;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">&quot;icon_overlay_file_status&quot;</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">&amp;</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">-&gt;</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">&quot;path&quot;</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">&quot;get_folder_tag&quot;</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">&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">dgc</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dgc</span><span class="o">-&gt;</span><span class="n">handler</span><span class="p">(</span><span class="n">dgcr</span><span class="o">-&gt;</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">dgcr</span><span class="o">-&gt;</span><span class="n">dgc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">dgc</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dgc</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dgc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">command_args</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="n">bytes_read</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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">&amp;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;%s/.dropbox/command_socket&quot;</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">&gt;</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">&gt;</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">&amp;</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">&gt;</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">&amp;</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(&quot;setsockopt failed&quot;); */</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">&lt;</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">&lt;</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(&quot;fcntl failed&quot;); */</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">&amp;</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">&lt;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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(&quot;connection timeout&quot;); */</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">&amp;</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">&lt;</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(&quot;couldn&#39;t connect to command server after 1 second&quot;); */</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(&quot;bad connection&quot;); */</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">&lt;</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(&quot;fcntl2 failed&quot;); */</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">-&gt;</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">-&gt;</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">&gt;=</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">&quot;command client connected&quot;</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">&quot;</span><span class="se">\n</span><span class="s">&quot;</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(&amp;(dcc-&gt;command_connected_mutex)); \</span>
+<a id="line-649" name="line-649"></a><span class="cp"> dcc-&gt;command_connected = s; \</span>
+<a id="line-650" name="line-650"></a><span class="cp"> g_mutex_unlock(&amp;(dcc-&gt;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">-&gt;</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">&amp;</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">&quot;got a reset request&quot;</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">-&gt;</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">&quot;doing file info command&quot;</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">&amp;</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">&quot;doing general command&quot;</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">&amp;</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">&quot;done.&quot;</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(&quot;COMMAND ERROR*****************************&quot;);</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">&quot;command error: %s&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">gerr</span><span class="o">-&gt;</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&#39;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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">&quot;forcing command to reconnect&quot;</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">&amp;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dcc</span><span class="o">-&gt;</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">&quot;shouldn&#39;t be here...&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;starting command thread&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</span><span class="error2">&lt;--- 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">&lt;glib-object.h&gt;</span><span class="error2">&lt;--- 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">&quot;caja-dropbox.h&quot;</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">&quot;Initializing %s</span><span class="se">\n</span><span class="s">&quot;</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">&quot;Shutting down dropbox extension</span><span class="se">\n</span><span class="s">&quot;</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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;glib.h&gt;</span><span class="error2">&lt;--- 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, &amp;__line, \</span>
+<a id="line-43" name="line-43"></a><span class="cp"> &amp;__line_length, \</span>
+<a id="line-44" name="line-44"></a><span class="cp"> &amp;__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) = &#39;\0&#39;; \</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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;glib.h&gt;</span><span class="error2">&lt;--- 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;glib.h&gt;</span><span class="error2">&lt;--- 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</span><span class="c1"> /* for GETTEXT_PACKAGE */</span><span class="error2">&lt;--- 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">&lt;sys/types.h&gt;</span><span class="error2">&lt;--- 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">&lt;sys/socket.h&gt;</span><span class="error2">&lt;--- 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">&lt;sys/un.h&gt;</span><span class="error2">&lt;--- 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">&lt;errno.h&gt;</span><span class="error2">&lt;--- 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">&lt;unistd.h&gt;</span><span class="error2">&lt;--- 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">&lt;ctype.h&gt;</span><span class="error2">&lt;--- 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">&lt;glib.h&gt;</span><span class="error2">&lt;--- 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">&lt;glib/gprintf.h&gt;</span><span class="error2">&lt;--- 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">&lt;glib-object.h&gt;</span><span class="error2">&lt;--- 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">&lt;gtk/gtk.h&gt;</span><span class="error2">&lt;--- 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">&lt;libcaja-extension/caja-extension-types.h&gt;</span><span class="error2">&lt;--- 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">&lt;libcaja-extension/caja-menu-provider.h&gt;</span><span class="error2">&lt;--- 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">&lt;libcaja-extension/caja-info-provider.h&gt;</span><span class="error2">&lt;--- 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">&quot;g-util.h&quot;</span>
+<a id="line-45" name="line-45"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;dropbox-command-client.h&quot;</span>
+<a id="line-46" name="line-46"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;caja-dropbox.h&quot;</span>
+<a id="line-47" name="line-47"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;caja-dropbox-hooks.h&quot;</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">&quot;dropbox-uptodate&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-syncing&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox-unsyncable&quot;</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 &#39;.&#39; and &#39;..&#39;</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">&#39;/&#39;</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">&quot;/&quot;</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">&quot;/&quot;</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">&quot;..&quot;</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">&gt;</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">&quot;.&quot;</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">&amp;&amp;</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">&#39;\0&#39;</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">&quot;resetting file %p&quot;</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&#39;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">-&gt;</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">-&gt;</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(&quot;removing %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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&#39;t do this for us, for some reason</span>
+<a id="line-176" name="line-176"></a><span class="cm"> the file&#39;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">&quot;shifty old: %s, new %s&quot;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;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">-&gt;</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">-&gt;</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(&quot;adding %s &lt;-&gt; 0x%p&quot;, 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">-&gt;</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">-&gt;</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">&quot;changed&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;path&quot;</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">&amp;&amp;</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">&#39;/&#39;</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">&lt;--- The scope of the variable 'file' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;file&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&quot;shell touch for %s&quot;</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">-&gt;</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">&quot;gonna reset %s&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">emblems_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;emblems&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">file_status_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;status&quot;</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">&amp;&amp;</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">&amp;&amp;</span>
+<a id="line-359" name="line-359"></a><span class="w"> </span><span class="n">dficr</span><span class="o">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">folder_tag_response</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;tag&quot;</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">&quot;public&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;web&quot;</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">&quot;shared&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;people&quot;</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">&quot;photos&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;photos&quot;</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">&quot;sandbox&quot;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;star&quot;</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">&quot;up to date&quot;</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">&quot;syncing&quot;</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">&quot;unsyncable&quot;</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">&gt;</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(&quot;%s to %s&quot;, 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-&gt;dfic-&gt;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</span><span class="n">dfic</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">&quot;verb&quot;</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">-&gt;</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">&quot;icon_overlay_context_action&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&#39;0&#39;</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">&#39;a&#39;</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 --&gt; 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&#39;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">&lt;--- 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">&lt;</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&#39;%&#39;</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">&#39;\0&#39;</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</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">&#39;\0&#39;</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">&lt;&lt;</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&#39;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">&lt;</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">&#39;\0&#39;</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">&quot;~&quot;</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">&#39;~&#39;</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">-&gt;</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">&quot;|&quot;</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">&quot;::&quot;</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">-&gt;</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">&quot;&quot;</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">-&gt;</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">&#39;!&#39;</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">-&gt;</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">&quot;caja_dropbox_files&quot;</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">&quot;caja_dropbox_verb&quot;</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">&quot;activate&quot;</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">&amp;</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">&amp;</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">&quot;sensitive&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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&#39;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">&lt;</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">-&gt;</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">-&gt;</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&#39;t correctly encoded, or isn&#39;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 &quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;icon_overlay_context_options&quot;</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">-&gt;</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">-&gt;</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">&quot;paths&quot;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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&#39;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">&quot;options&quot;</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">&amp;&amp;</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">&amp;&amp;</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">&quot;CajaDropbox::root_item&quot;</span><span class="p">,</span>
+<a id="line-722" name="line-722"></a><span class="w"> </span><span class="s">&quot;Dropbox&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Dropbox Options&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;dropbox&quot;</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">&quot;CajaDropbox::&quot;</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&#39;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">&lt;--- The scope of the variable 'i' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;i&apos; can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;i);
+ }
+ }
+}
+When you see this message it is always safe to reduce the variable scope 1 level.</div></div>
+</span><a 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">&amp;&amp;</span><span class="error2">&lt;--- 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">&quot;path&quot;</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&#39;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">&quot;path&quot;</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">&amp;</span><span class="n">paths</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</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">&lt;</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">&quot;path&quot;</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&#39;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;get_emblem_paths&quot;</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">&lt;--- 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 &quot;ERROR&quot;, 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 &quot;ERROR&quot; output go away.
+#include &lt;stdarg.h&gt;
+#include &lt;stdio.h&gt;
+
+void f(char *s, ...) {
+ va_list ap;
+ va_start(ap,s);
+ for (;;) {
+ char *p = va_arg(ap,char*);
+ printf(&quot;%018p, %s\n&quot;, p, (long)p &amp; 255 ? p : &quot;&quot;);
+ if(!p) break;
+ }
+ va_end(ap);
+}
+
+void g() {
+ char *s2 = &quot;x&quot;;
+ char *s3 = &quot;ERROR&quot;;
+
+ // changing 0 to 0L for the 7th argument (which is intended to act as sentinel) makes the error go away on x86_64
+ f(&quot;first&quot;, s2, s2, s2, s2, s2, 0, s3, (char*)0);
+}
+
+void h() {
+ int i;
+ volatile unsigned char a[1000];
+ for (i = 0; i&lt;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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;shell_touch&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;about to start client connection&quot;</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">&amp;</span><span class="p">(</span><span class="n">cvs</span><span class="o">-&gt;</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">&quot;just checking&quot;</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">&quot;CajaDropbox&quot;</span><span class="p">,</span>
+<a id="line-956" name="line-956"></a><span class="w"> </span><span class="o">&amp;</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">&amp;</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">&amp;</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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;libcaja-extension/caja-info-provider.h&gt;</span><span class="error2">&lt;--- 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">&lt;libcaja-extension/caja-file-info.h&gt;</span><span class="error2">&lt;--- 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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;glib.h&gt;</span><span class="error2">&lt;--- 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">&lt;glib-object.h&gt;</span><span class="error2">&lt;--- 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">&lt;libcaja-extension/caja-info-provider.h&gt;</span><span class="error2">&lt;--- 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">&quot;dropbox-command-client.h&quot;</span>
+<a id="line-33" name="line-33"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;caja-dropbox-hooks.h&quot;</span>
+<a id="line-34" name="line-34"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;dropbox-client.h&quot;</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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;glib.h&gt;</span><span class="error2">&lt;--- 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">&quot;dropbox-command-client.h&quot;</span>
+<a id="line-29" name="line-29"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;caja-dropbox-hooks.h&quot;</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 &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;glib.h&gt;</span><span class="error2">&lt;--- 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">&quot;g-util.h&quot;</span>
+<a id="line-27" name="line-27"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;dropbox-command-client.h&quot;</span>
+<a id="line-28" name="line-28"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;caja-dropbox-hooks.h&quot;</span>
+<a id="line-29" name="line-29"></a><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;dropbox-client.h&quot;</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">-&gt;</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">-&gt;</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">&quot;client connection&quot;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;client connection&quot;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;client disconnect&quot;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot;client disconnect&quot;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</span><span class="n">dcc</span><span class="p">))</span><span class="w"> </span><span class="o">&amp;&amp;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&quot;forcing client to reconnect&quot;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&quot;shouldn&#39;t be here...&quot;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&quot;starting connections&quot;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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">&amp;</span><span class="p">(</span><span class="n">dc</span><span class="o">-&gt;</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=&lt;filename&gt; 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: &lt;glib.h&gt; 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: &lt;sys/types.h&gt; 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: &lt;sys/socket.h&gt; 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: &lt;sys/un.h&gt; 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: &lt;errno.h&gt; 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: &lt;unistd.h&gt; 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: &lt;fcntl.h&gt; 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: &lt;string.h&gt; 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: &lt;glib.h&gt; 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 &apos;hookserv&apos; 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: &lt;glib.h&gt; 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: &lt;config.h&gt; 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: &lt;sys/types.h&gt; 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: &lt;sys/socket.h&gt; 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: &lt;sys/un.h&gt; 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: &lt;errno.h&gt; 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: &lt;unistd.h&gt; 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: &lt;ctype.h&gt; 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: &lt;glib.h&gt; 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: &lt;glib/gprintf.h&gt; 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: &lt;glib-object.h&gt; 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: &lt;gtk/gtk.h&gt; 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: &lt;libcaja-extension/caja-extension-types.h&gt; 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: &lt;libcaja-extension/caja-menu-provider.h&gt; 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: &lt;libcaja-extension/caja-info-provider.h&gt; 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 &apos;file&apos; 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 &apos;out_initial&apos; 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 &apos;i&apos; 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 &apos;emblem_paths_response&apos; 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: &lt;glib.h&gt; 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: &lt;glib-object.h&gt; 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: &lt;libcaja-extension/caja-info-provider.h&gt; 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: &lt;glib.h&gt; 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: &lt;glib.h&gt; 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: &lt;glib.h&gt; 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: &lt;sys/types.h&gt; 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: &lt;sys/socket.h&gt; 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: &lt;sys/un.h&gt; 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: &lt;errno.h&gt; 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: &lt;unistd.h&gt; 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: &lt;fcntl.h&gt; 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: &lt;stdarg.h&gt; 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: &lt;string.h&gt; 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: &lt;glib.h&gt; 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: &lt;libcaja-extension/caja-info-provider.h&gt; 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: &lt;libcaja-extension/caja-file-info.h&gt; 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: &lt;config.h&gt; 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: &lt;glib-object.h&gt; 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: &lt;glib.h&gt; 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: &lt;glib/gprintf.h&gt; 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>
+&#160;&#160;&#160;1&#160;<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>
+&#160;&#160;&#160;4&#160;<a href="5.html"> src/caja-dropbox.c</a><br>
+&#160;&#160;&#160;1&#160;<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>
+&#160;&#160;&#160;14&#160;<a href="5.html"> src/caja-dropbox.c</a><br>
+&#160;&#160;&#160;9&#160;&#160;<a href="10.html"> src/dropbox-command-client.c</a><br>
+&#160;&#160;&#160;8&#160;&#160;<a href="0.html"> src/caja-dropbox-hooks.c</a><br>
+&#160;&#160;&#160;3&#160;&#160;<a href="7.html"> src/caja-dropbox.h</a><br>
+&#160;&#160;&#160;2&#160;&#160;<a href="1.html"> src/g-util.h</a><br>
+&#160;&#160;&#160;2&#160;&#160;<a href="11.html"> src/dropbox.c</a><br>
+&#160;&#160;&#160;2&#160;&#160;<a href="6.html"> src/dropbox-command-client.h</a><br>
+&#160;&#160;&#160;1&#160;&#160;<a href="8.html"> src/dropbox-client.h</a><br>
+&#160;&#160;&#160;1&#160;&#160;<a href="9.html"> src/dropbox-client.c</a><br>
+&#160;&#160;&#160;1&#160;&#160;<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;
+}
diff --git a/CNAME b/CNAME
new file mode 100644
index 0000000..835e76d
--- /dev/null
+++ b/CNAME
@@ -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>