Sophie

Sophie

distrib > Fedora > 20 > x86_64 > by-pkgid > 6d84730ef4a15e14ee2d4fddc27b3190 > files > 19

libmtp-devel-1.1.9-1.fc20.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>libmtp: detect.c</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">libmtp
   &#160;<span id="projectnumber">1.1.9</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">detect.c</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"></div>
<div class="line"><span class="preprocessor">#include &quot;common.h&quot;</span></div>
<div class="line"><span class="preprocessor">#include &quot;util.h&quot;</span></div>
<div class="line"><span class="preprocessor">#include &lt;unistd.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;errno.h&gt;</span></div>
<div class="line"></div>
<div class="line"><span class="preprocessor">#define XML_BUFSIZE 0x10000</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> dump_xml_fragment(uint8_t *buf, uint32_t len)</div>
<div class="line">{</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">int</span> endianness = 0; <span class="comment">// 0 = LE, 1 = BE</span></div>
<div class="line">  uint32_t bp = 0;</div>
<div class="line"></div>
<div class="line">  <span class="keywordflow">while</span> (bp &lt; len) {</div>
<div class="line">    <span class="keywordflow">if</span> (buf[bp+0] == 0xFF &amp;&amp; buf[bp+1] == 0xFE) {</div>
<div class="line">      endianness = 0;</div>
<div class="line">    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (buf[bp+0] == 0xFE &amp;&amp; buf[bp+1] == 0xff) {</div>
<div class="line">      endianness = 1;</div>
<div class="line">    } <span class="keywordflow">else</span> {</div>
<div class="line">      uint16_t tmp;</div>
<div class="line"></div>
<div class="line">      <span class="keywordflow">if</span> (endianness == 0) {</div>
<div class="line">        tmp = buf[bp+1] &lt;&lt; 8 | buf[bp+0];</div>
<div class="line">      } <span class="keywordflow">else</span> {</div>
<div class="line">        tmp = buf[bp+0] &lt;&lt; 8 | buf[bp+1];</div>
<div class="line">      }</div>
<div class="line">      <span class="comment">// Fix this some day, we only print ISO 8859-1 correctly here,</span></div>
<div class="line">      <span class="comment">// should atleast support UTF-8.</span></div>
<div class="line">      printf(<span class="stringliteral">&quot;%c&quot;</span>, (uint8_t) tmp);</div>
<div class="line">    }</div>
<div class="line">    bp += 2;</div>
<div class="line">  }</div>
<div class="line">  printf(<span class="stringliteral">&quot;\n&quot;</span>);</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
<div class="line">{</div>
<div class="line">  <a name="_a0"></a><a class="code" href="structLIBMTP__raw__device__struct.html">LIBMTP_raw_device_t</a> * rawdevices;</div>
<div class="line">  <span class="keywordtype">int</span> numrawdevices;</div>
<div class="line">  <a class="code" href="group__types.html#ga1e5fcb2945c5e60bf5bd9e847a904fa8">LIBMTP_error_number_t</a> err;</div>
<div class="line">  <span class="keywordtype">int</span> i;</div>
<div class="line"></div>
<div class="line">  <span class="keywordtype">int</span> opt;</div>
<div class="line">  <span class="keyword">extern</span> <span class="keywordtype">int</span> optind;</div>
<div class="line">  <span class="keyword">extern</span> <span class="keywordtype">char</span> *optarg;</div>
<div class="line"></div>
<div class="line">  <span class="keywordflow">while</span> ((opt = getopt(argc, argv, <span class="stringliteral">&quot;d&quot;</span>)) != -1 ) {</div>
<div class="line">    <span class="keywordflow">switch</span> (opt) {</div>
<div class="line">    <span class="keywordflow">case</span> <span class="charliteral">&#39;d&#39;</span>:</div>
<div class="line">      <a name="a1"></a><a class="code" href="group__internals.html#gab855a6f761b0210b1d986d5a02a22c10">LIBMTP_Set_Debug</a>(LIBMTP_DEBUG_PTP | LIBMTP_DEBUG_DATA);</div>
<div class="line">      <span class="keywordflow">break</span>;</div>
<div class="line">    }</div>
<div class="line">  }</div>
<div class="line"></div>
<div class="line">  argc -= optind;</div>
<div class="line">  argv += optind;</div>
<div class="line"></div>
<div class="line">  <a name="a2"></a><a class="code" href="group__internals.html#gaaca880ea9ab434e8cf1a1051128318ef">LIBMTP_Init</a>();</div>
<div class="line"></div>
<div class="line">  fprintf(stdout, <span class="stringliteral">&quot;libmtp version: &quot;</span> LIBMTP_VERSION_STRING <span class="stringliteral">&quot;\n\n&quot;</span>);</div>
<div class="line"></div>
<div class="line">  fprintf(stdout, <span class="stringliteral">&quot;Listing raw device(s)\n&quot;</span>);</div>
<div class="line">  err = <a name="a3"></a><a class="code" href="group__basic.html#gae54131d2a1ed21292fa270921afb9d46">LIBMTP_Detect_Raw_Devices</a>(&amp;rawdevices, &amp;numrawdevices);</div>
<div class="line">  <span class="keywordflow">switch</span>(err) {</div>
<div class="line">  <span class="keywordflow">case</span> LIBMTP_ERROR_NO_DEVICE_ATTACHED:</div>
<div class="line">    fprintf(stdout, <span class="stringliteral">&quot;   No raw devices found.\n&quot;</span>);</div>
<div class="line">    <span class="keywordflow">return</span> 0;</div>
<div class="line">  <span class="keywordflow">case</span> LIBMTP_ERROR_CONNECTING:</div>
<div class="line">    fprintf(stderr, <span class="stringliteral">&quot;Detect: There has been an error connecting. Exiting\n&quot;</span>);</div>
<div class="line">    <span class="keywordflow">return</span> 1;</div>
<div class="line">  <span class="keywordflow">case</span> LIBMTP_ERROR_MEMORY_ALLOCATION:</div>
<div class="line">    fprintf(stderr, <span class="stringliteral">&quot;Detect: Encountered a Memory Allocation Error. Exiting\n&quot;</span>);</div>
<div class="line">    <span class="keywordflow">return</span> 1;</div>
<div class="line">  <span class="keywordflow">case</span> LIBMTP_ERROR_NONE:</div>
<div class="line">    {</div>
<div class="line">      <span class="keywordtype">int</span> i;</div>
<div class="line"></div>
<div class="line">      fprintf(stdout, <span class="stringliteral">&quot;   Found %d device(s):\n&quot;</span>, numrawdevices);</div>
<div class="line">      <span class="keywordflow">for</span> (i = 0; i &lt; numrawdevices; i++) {</div>
<div class="line">        <span class="keywordflow">if</span> (rawdevices[i].device_entry.vendor != NULL ||</div>
<div class="line">            rawdevices[i].<a name="a4"></a><a class="code" href="structLIBMTP__raw__device__struct.html#af01da354d13112259a3f210fecec6283">device_entry</a>.<a name="a5"></a><a class="code" href="structLIBMTP__device__entry__struct.html#ad392e158dfb9bb0aef58d180b98357e5">product</a> != NULL) {</div>
<div class="line">          fprintf(stdout, <span class="stringliteral">&quot;   %s: %s (%04x:%04x) @ bus %d, dev %d\n&quot;</span>,</div>
<div class="line">                  rawdevices[i].device_entry.vendor,</div>
<div class="line">                  rawdevices[i].<a class="code" href="structLIBMTP__raw__device__struct.html#af01da354d13112259a3f210fecec6283">device_entry</a>.<a class="code" href="structLIBMTP__device__entry__struct.html#ad392e158dfb9bb0aef58d180b98357e5">product</a>,</div>
<div class="line">                  rawdevices[i].<a class="code" href="structLIBMTP__raw__device__struct.html#af01da354d13112259a3f210fecec6283">device_entry</a>.<a name="a6"></a><a class="code" href="structLIBMTP__device__entry__struct.html#a132af448075c74acbbc389d074ce1f97">vendor_id</a>,</div>
<div class="line">                  rawdevices[i].<a class="code" href="structLIBMTP__raw__device__struct.html#af01da354d13112259a3f210fecec6283">device_entry</a>.<a name="a7"></a><a class="code" href="structLIBMTP__device__entry__struct.html#a450dfc3a7c9d46f998ad1599df776193">product_id</a>,</div>
<div class="line">                  rawdevices[i].<a name="a8"></a><a class="code" href="structLIBMTP__raw__device__struct.html#af2dae736de12f8ad189b8ea7d0688ab8">bus_location</a>,</div>
<div class="line">                  rawdevices[i].<a name="a9"></a><a class="code" href="structLIBMTP__raw__device__struct.html#ada1008955e7c65a933f29105a8f28104">devnum</a>);</div>
<div class="line">        } <span class="keywordflow">else</span> {</div>
<div class="line">          fprintf(stdout, <span class="stringliteral">&quot;   %04x:%04x @ bus %d, dev %d\n&quot;</span>,</div>
<div class="line">                  rawdevices[i].device_entry.vendor_id,</div>
<div class="line">                  rawdevices[i].<a class="code" href="structLIBMTP__raw__device__struct.html#af01da354d13112259a3f210fecec6283">device_entry</a>.<a class="code" href="structLIBMTP__device__entry__struct.html#a450dfc3a7c9d46f998ad1599df776193">product_id</a>,</div>
<div class="line">                  rawdevices[i].<a class="code" href="structLIBMTP__raw__device__struct.html#af2dae736de12f8ad189b8ea7d0688ab8">bus_location</a>,</div>
<div class="line">                  rawdevices[i].<a class="code" href="structLIBMTP__raw__device__struct.html#ada1008955e7c65a933f29105a8f28104">devnum</a>);</div>
<div class="line">        }</div>
<div class="line">      }</div>
<div class="line">    }</div>
<div class="line">    <span class="keywordflow">break</span>;</div>
<div class="line">  <span class="keywordflow">case</span> LIBMTP_ERROR_GENERAL:</div>
<div class="line">  <span class="keywordflow">default</span>:</div>
<div class="line">    fprintf(stderr, <span class="stringliteral">&quot;Unknown connection error.\n&quot;</span>);</div>
<div class="line">    <span class="keywordflow">return</span> 1;</div>
<div class="line">  }</div>
<div class="line"></div>
<div class="line">  <span class="comment">/* Iterate over connected MTP devices */</span></div>
<div class="line">  fprintf(stdout, <span class="stringliteral">&quot;Attempting to connect device(s)\n&quot;</span>);</div>
<div class="line">  <span class="keywordflow">for</span> (i = 0; i &lt; numrawdevices; i++) {</div>
<div class="line">    <a name="_a10"></a><a class="code" href="structLIBMTP__mtpdevice__struct.html">LIBMTP_mtpdevice_t</a> *device;</div>
<div class="line">    <a name="_a11"></a><a class="code" href="structLIBMTP__file__struct.html">LIBMTP_file_t</a> *files;</div>
<div class="line">    <span class="keywordtype">char</span> *friendlyname;</div>
<div class="line">    <span class="keywordtype">char</span> *syncpartner;</div>
<div class="line">    <span class="keywordtype">char</span> *sectime;</div>
<div class="line">    <span class="keywordtype">char</span> *devcert;</div>
<div class="line">    uint16_t *filetypes;</div>
<div class="line">    uint16_t filetypes_len;</div>
<div class="line">    uint8_t maxbattlevel;</div>
<div class="line">    uint8_t currbattlevel;</div>
<div class="line">    <span class="keywordtype">int</span> ret;</div>
<div class="line"></div>
<div class="line">    device = LIBMTP_Open_Raw_Device(&amp;rawdevices[i]);</div>
<div class="line">    <span class="keywordflow">if</span> (device == NULL) {</div>
<div class="line">      fprintf(stderr, <span class="stringliteral">&quot;Unable to open raw device %d\n&quot;</span>, i);</div>
<div class="line">      <span class="keywordflow">continue</span>;</div>
<div class="line">    }</div>
<div class="line"></div>
<div class="line">    <a name="a12"></a><a class="code" href="group__basic.html#ga682c81a83fa04b2caf5c962db1eaff82">LIBMTP_Dump_Errorstack</a>(device);</div>
<div class="line">    <a name="a13"></a><a class="code" href="group__basic.html#ga6c05b927310ac830c149ae3eeae94047">LIBMTP_Clear_Errorstack</a>(device);</div>
<div class="line">    <a name="a14"></a><a class="code" href="group__basic.html#gaeabdf4e3d2f387ee357755ae356cc105">LIBMTP_Dump_Device_Info</a>(device);</div>
<div class="line"></div>
<div class="line">    printf(<span class="stringliteral">&quot;MTP-specific device properties:\n&quot;</span>);</div>
<div class="line">    <span class="comment">// The friendly name</span></div>
<div class="line">    friendlyname = <a name="a15"></a><a class="code" href="group__basic.html#ga3d9d80c2239c923ee20eca28060b8188">LIBMTP_Get_Friendlyname</a>(device);</div>
<div class="line">    <span class="keywordflow">if</span> (friendlyname == NULL) {</div>
<div class="line">      fprintf(stdout, <span class="stringliteral">&quot;   Friendly name: (NULL)\n&quot;</span>);</div>
<div class="line">    } <span class="keywordflow">else</span> {</div>
<div class="line">      fprintf(stdout, <span class="stringliteral">&quot;   Friendly name: %s\n&quot;</span>, friendlyname);</div>
<div class="line">      free(friendlyname);</div>
<div class="line">    }</div>
<div class="line">    syncpartner = <a name="a16"></a><a class="code" href="group__basic.html#ga243929e37e36da1a60ec159ebdec6d29">LIBMTP_Get_Syncpartner</a>(device);</div>
<div class="line">    <span class="keywordflow">if</span> (syncpartner == NULL) {</div>
<div class="line">      fprintf(stdout, <span class="stringliteral">&quot;   Synchronization partner: (NULL)\n&quot;</span>);</div>
<div class="line">    } <span class="keywordflow">else</span> {</div>
<div class="line">      fprintf(stdout, <span class="stringliteral">&quot;   Synchronization partner: %s\n&quot;</span>, syncpartner);</div>
<div class="line">      free(syncpartner);</div>
<div class="line">    }</div>
<div class="line"></div>
<div class="line">    <span class="comment">// Some battery info</span></div>
<div class="line">    ret = <a name="a17"></a><a class="code" href="group__basic.html#gae76db5d99c3275da90c01c1eb735c68c">LIBMTP_Get_Batterylevel</a>(device, &amp;maxbattlevel, &amp;currbattlevel);</div>
<div class="line">    <span class="keywordflow">if</span> (ret == 0) {</div>
<div class="line">      fprintf(stdout, <span class="stringliteral">&quot;   Battery level %d of %d (%d%%)\n&quot;</span>,currbattlevel, maxbattlevel,</div>
<div class="line">              (<span class="keywordtype">int</span>) ((<span class="keywordtype">float</span>) currbattlevel/ (<span class="keywordtype">float</span>) maxbattlevel * 100.0));</div>
<div class="line">    } <span class="keywordflow">else</span> {</div>
<div class="line">      <span class="comment">// Silently ignore. Some devices does not support getting the</span></div>
<div class="line">      <span class="comment">// battery level.</span></div>
<div class="line">      <a class="code" href="group__basic.html#ga6c05b927310ac830c149ae3eeae94047">LIBMTP_Clear_Errorstack</a>(device);</div>
<div class="line">    }</div>
<div class="line"></div>
<div class="line">    ret = <a name="a18"></a><a class="code" href="group__basic.html#ga7b6ada53eea9960c48be42289249e2d6">LIBMTP_Get_Supported_Filetypes</a>(device, &amp;filetypes, &amp;filetypes_len);</div>
<div class="line">    <span class="keywordflow">if</span> (ret == 0) {</div>
<div class="line">      uint16_t i;</div>
<div class="line"></div>
<div class="line">      printf(<span class="stringliteral">&quot;libmtp supported (playable) filetypes:\n&quot;</span>);</div>
<div class="line">      <span class="keywordflow">for</span> (i = 0; i &lt; filetypes_len; i++) {</div>
<div class="line">        fprintf(stdout, <span class="stringliteral">&quot;   %s\n&quot;</span>, <a name="a19"></a><a class="code" href="group__files.html#ga9d920e6a6a80d9497076798c0f54ce34">LIBMTP_Get_Filetype_Description</a>(filetypes[i]));</div>
<div class="line">      }</div>
<div class="line">    } <span class="keywordflow">else</span> {</div>
<div class="line">      <a class="code" href="group__basic.html#ga682c81a83fa04b2caf5c962db1eaff82">LIBMTP_Dump_Errorstack</a>(device);</div>
<div class="line">      <a class="code" href="group__basic.html#ga6c05b927310ac830c149ae3eeae94047">LIBMTP_Clear_Errorstack</a>(device);</div>
<div class="line">    }</div>
<div class="line"></div>
<div class="line">    <span class="comment">// Secure time XML fragment</span></div>
<div class="line">    ret = <a name="a20"></a><a class="code" href="group__basic.html#ga18ec60e1645241cb8639e0b9e21eb8a0">LIBMTP_Get_Secure_Time</a>(device, &amp;sectime);</div>
<div class="line">    <span class="keywordflow">if</span> (ret == 0 &amp;&amp; sectime != NULL) {</div>
<div class="line">      fprintf(stdout, <span class="stringliteral">&quot;\nSecure Time:\n%s\n&quot;</span>, sectime);</div>
<div class="line">      free(sectime);</div>
<div class="line">    } <span class="keywordflow">else</span> {</div>
<div class="line">      <span class="comment">// Silently ignore - there may be devices not supporting secure time.</span></div>
<div class="line">      <a class="code" href="group__basic.html#ga6c05b927310ac830c149ae3eeae94047">LIBMTP_Clear_Errorstack</a>(device);</div>
<div class="line">    }</div>
<div class="line"></div>
<div class="line">    <span class="comment">// Device certificate XML fragment</span></div>
<div class="line"><span class="preprocessor">#if 0</span></div>
<div class="line"><span class="preprocessor"></span>    <span class="comment">/*</span></div>
<div class="line"><span class="comment">     * This code is currently disabled: all devices say that</span></div>
<div class="line"><span class="comment">     * they support getting a device certificate but a lot of</span></div>
<div class="line"><span class="comment">     * them obviously doesn&#39;t, instead they crash when you try</span></div>
<div class="line"><span class="comment">     * to obtain it.</span></div>
<div class="line"><span class="comment">     */</span></div>
<div class="line">    ret = <a name="a21"></a><a class="code" href="group__basic.html#ga73185af9ad56df247732fdcc7a6bf62c">LIBMTP_Get_Device_Certificate</a>(device, &amp;devcert);</div>
<div class="line">    <span class="keywordflow">if</span> (ret == 0 &amp;&amp; devcert != NULL) {</div>
<div class="line">      fprintf(stdout, <span class="stringliteral">&quot;\nDevice Certificate:\n%s\n&quot;</span>, devcert);</div>
<div class="line">      free(devcert);</div>
<div class="line">    } <span class="keywordflow">else</span> {</div>
<div class="line">      fprintf(stdout, <span class="stringliteral">&quot;Unable to acquire device certificate, perhaps this device &quot;</span></div>
<div class="line">              <span class="stringliteral">&quot;does not support this\n&quot;</span>);</div>
<div class="line">      <a class="code" href="group__basic.html#ga682c81a83fa04b2caf5c962db1eaff82">LIBMTP_Dump_Errorstack</a>(device);</div>
<div class="line">      <a class="code" href="group__basic.html#ga6c05b927310ac830c149ae3eeae94047">LIBMTP_Clear_Errorstack</a>(device);</div>
<div class="line">    }</div>
<div class="line"><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line">    <span class="comment">// Try to get Media player device info XML file...</span></div>
<div class="line">    files = <a name="a22"></a><a class="code" href="group__files.html#ga701850b1f5e7d52694aa3eefa1a3582d">LIBMTP_Get_Filelisting_With_Callback</a>(device, NULL, NULL);</div>
<div class="line">    <span class="keywordflow">if</span> (files != NULL) {</div>
<div class="line">      <a class="code" href="structLIBMTP__file__struct.html">LIBMTP_file_t</a> *file, *tmp;</div>
<div class="line">      file = files;</div>
<div class="line">      <span class="keywordflow">while</span> (file != NULL) {</div>
<div class="line">        <span class="keywordflow">if</span> (!strcmp(file-&gt;<a name="a23"></a><a class="code" href="structLIBMTP__file__struct.html#a2e92321a14e1604da9ab4648184d182d">filename</a>, <span class="stringliteral">&quot;WMPInfo.xml&quot;</span>) ||</div>
<div class="line">            !strcmp(file-&gt;<a class="code" href="structLIBMTP__file__struct.html#a2e92321a14e1604da9ab4648184d182d">filename</a>, <span class="stringliteral">&quot;WMPinfo.xml&quot;</span>) ||</div>
<div class="line">            !strcmp(file-&gt;<a class="code" href="structLIBMTP__file__struct.html#a2e92321a14e1604da9ab4648184d182d">filename</a>, <span class="stringliteral">&quot;default-capabilities.xml&quot;</span>)) {</div>
<div class="line">            <span class="keywordflow">if</span> (file-&gt;<a name="a24"></a><a class="code" href="structLIBMTP__file__struct.html#aaf61e9bb66af366adbc1ea834ffcb459">item_id</a> != 0) {</div>
<div class="line">              <span class="comment">/* Dump this file */</span></div>
<div class="line">              FILE *xmltmp = tmpfile();</div>
<div class="line">              <span class="keywordtype">int</span> tmpfiledescriptor = fileno(xmltmp);</div>
<div class="line"></div>
<div class="line">              <span class="keywordflow">if</span> (tmpfiledescriptor != -1) {</div>
<div class="line">                <span class="keywordtype">int</span> ret = <a name="a25"></a><a class="code" href="group__tracks.html#ga0836d80a1a78c604a805f0c347b8f236">LIBMTP_Get_Track_To_File_Descriptor</a>(device,</div>
<div class="line">                                                              file-&gt;<a class="code" href="structLIBMTP__file__struct.html#aaf61e9bb66af366adbc1ea834ffcb459">item_id</a>,</div>
<div class="line">                                                              tmpfiledescriptor,</div>
<div class="line">                                                              NULL,</div>
<div class="line">                                                              NULL);</div>
<div class="line">                <span class="keywordflow">if</span> (ret == 0) {</div>
<div class="line">                  uint8_t *buf = NULL;</div>
<div class="line">                  uint32_t readbytes;</div>
<div class="line"></div>
<div class="line">                  buf = malloc(XML_BUFSIZE);</div>
<div class="line">                  <span class="keywordflow">if</span> (buf == NULL) {</div>
<div class="line">                    printf(<span class="stringliteral">&quot;Could not allocate %08x bytes...\n&quot;</span>, XML_BUFSIZE);</div>
<div class="line">                    <a class="code" href="group__basic.html#ga682c81a83fa04b2caf5c962db1eaff82">LIBMTP_Dump_Errorstack</a>(device);</div>
<div class="line">                    <a class="code" href="group__basic.html#ga6c05b927310ac830c149ae3eeae94047">LIBMTP_Clear_Errorstack</a>(device);</div>
<div class="line">                    free(rawdevices);</div>
<div class="line">                    <span class="keywordflow">return</span> 1;</div>
<div class="line">                  }</div>
<div class="line"></div>
<div class="line">                  lseek(tmpfiledescriptor, 0, SEEK_SET);</div>
<div class="line">                  readbytes = read(tmpfiledescriptor, (<span class="keywordtype">void</span>*) buf, XML_BUFSIZE);</div>
<div class="line"></div>
<div class="line">                  <span class="keywordflow">if</span> (readbytes &gt;= 2 &amp;&amp; readbytes &lt; XML_BUFSIZE) {</div>
<div class="line">                    fprintf(stdout, <span class="stringliteral">&quot;\n%s file contents:\n&quot;</span>, file-&gt;<a class="code" href="structLIBMTP__file__struct.html#a2e92321a14e1604da9ab4648184d182d">filename</a>);</div>
<div class="line">                    dump_xml_fragment(buf, readbytes);</div>
<div class="line">                  } <span class="keywordflow">else</span> {</div>
<div class="line">                    perror(<span class="stringliteral">&quot;Unable to read file&quot;</span>);</div>
<div class="line">                    <a class="code" href="group__basic.html#ga682c81a83fa04b2caf5c962db1eaff82">LIBMTP_Dump_Errorstack</a>(device);</div>
<div class="line">                    <a class="code" href="group__basic.html#ga6c05b927310ac830c149ae3eeae94047">LIBMTP_Clear_Errorstack</a>(device);</div>
<div class="line">                  }</div>
<div class="line">                  free(buf);</div>
<div class="line">                } <span class="keywordflow">else</span> {</div>
<div class="line">                  <a class="code" href="group__basic.html#ga682c81a83fa04b2caf5c962db1eaff82">LIBMTP_Dump_Errorstack</a>(device);</div>
<div class="line">                  <a class="code" href="group__basic.html#ga6c05b927310ac830c149ae3eeae94047">LIBMTP_Clear_Errorstack</a>(device);</div>
<div class="line">                }</div>
<div class="line">                fclose(xmltmp);</div>
<div class="line">              }</div>
<div class="line">            }</div>
<div class="line">        }</div>
<div class="line">        tmp = file;</div>
<div class="line">        file = file-&gt;<a name="a26"></a><a class="code" href="structLIBMTP__file__struct.html#a220976ae777e294a0001ce8d781aaed6">next</a>;</div>
<div class="line">        <a name="a27"></a><a class="code" href="group__files.html#ga0fed9e491256fb80b323bdd030b162e9">LIBMTP_destroy_file_t</a>(tmp);</div>
<div class="line">      }</div>
<div class="line">    }</div>
<div class="line">    <a name="a28"></a><a class="code" href="group__basic.html#ga55377eb5a8ff6ce2b1a557356fe12039">LIBMTP_Release_Device</a>(device);</div>
<div class="line">  } <span class="comment">/* End For Loop */</span></div>
<div class="line"></div>
<div class="line">  free(rawdevices);</div>
<div class="line"></div>
<div class="line">  printf(<span class="stringliteral">&quot;OK.\n&quot;</span>);</div>
<div class="line"></div>
<div class="line">  <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
</div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>