<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] al_read_directory()</title>
		<link>http://www.allegro.cc/forums/view/605915</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 28 Dec 2010 05:04:07 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Hi, got a crash with al_read_directory().</p><p>It occurs with this line :</p><p>file = al_read_directory( working_dir );</p><p>Tried everything I can think of to solve it but haven&#39;t worked it out.</p><p>Anyone see what&#39;s wrong ?</p><p>Thanks</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><a href="http://www.allegro.cc/manual/al_open_directory"><span class="a">al_open_directory</span></a><span class="k2">(</span> working_dir <span class="k2">)</span><span class="k2">;</span>
<span class="number">  2</span>  
<span class="number">  3</span>  count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  4</span>  
<span class="number">  5</span>  <span class="k1">for</span><span class="k2">(</span> fn <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> fn <span class="k3">&lt;</span> num_files<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>fn<span class="k2">)</span>
<span class="number">  6</span>  <span class="k2">{</span>
<span class="number">  7</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" fn is %d.\n"</span>, fn<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>    
<span class="number">  9</span>    <span class="k1">if</span><span class="k2">(</span>working_dir <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 10</span>    <span class="k2">{</span>
<span class="number"> 11</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" working_dir NULL.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>       <span class="k1">return</span> QUIT_PROGRAM<span class="k2">;</span>
<span class="number"> 13</span>    <span class="k2">}</span>
<span class="number"> 14</span>    
<span class="number"> 15</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" checked working_dir isn't NULL.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    
<span class="number"> 17</span>    file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_read_directory"><span class="a">al_read_directory</span></a><span class="k2">(</span> working_dir <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    
<span class="number"> 19</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" read directory.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>    
<span class="number"> 21</span>    <span class="k1">if</span><span class="k2">(</span>file <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 22</span>    <span class="k2">{</span>
<span class="number"> 23</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" file is NULL.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>       <span class="k1">return</span> QUIT_PROGRAM<span class="k2">;</span>
<span class="number"> 25</span>    
<span class="number"> 26</span>    <span class="k2">}</span>
</div></div><p>


EDIT : theanks to anyone who tried to solve it. The answer wasn&#39;t possible to see from the source I gave.</p><p>The problem was with this code :</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span>frd_filenames <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span> <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">char</span><span class="k2">)</span> <span class="k3">*</span> num_frd_files <span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>  
<span class="number">  4</span>  <span class="k1">for</span><span class="k2">(</span>fn <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> fn <span class="k3">&lt;</span> num_frd_files<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>fn<span class="k2">)</span>
<span class="number">  5</span>  <span class="k2">{</span>
<span class="number">  6</span>    frd_filenames<span class="k2">[</span>fn<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span> <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">char</span><span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span>longest_name <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>  <span class="k2">}</span>
<span class="number">  8</span>  
<span class="number">  9</span>  
<span class="number"> 10</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" allocated memory.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  
<span class="number"> 12</span>  
<span class="number"> 13</span>  <span class="c">//al_destroy_fs_entry(working_dir);</span>
<span class="number"> 14</span>  
<span class="number"> 15</span>  <span class="c">//working_dir = al_create_fs_entry(al_get_current_directory()); </span>
<span class="number"> 16</span>  
<span class="number"> 17</span>  <a href="http://www.allegro.cc/manual/al_open_directory"><span class="a">al_open_directory</span></a><span class="k2">(</span> working_dir <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  
<span class="number"> 19</span>  count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 20</span>  
<span class="number"> 21</span>  <span class="k1">for</span><span class="k2">(</span> fn <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> fn <span class="k3">&lt;</span> num_files<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>fn<span class="k2">)</span>
<span class="number"> 22</span>  <span class="k2">{</span>
<span class="number"> 23</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" fn is %d.\n"</span>, fn<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>    
<span class="number"> 25</span>    <span class="k1">if</span><span class="k2">(</span>working_dir <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 26</span>    <span class="k2">{</span>
<span class="number"> 27</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" working_dir NULL.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>       <span class="k1">return</span> QUIT_PROGRAM<span class="k2">;</span>
<span class="number"> 29</span>    <span class="k2">}</span>
<span class="number"> 30</span>    
<span class="number"> 31</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" checked working_dir isn't NULL.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>    
<span class="number"> 33</span>    file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_read_directory"><span class="a">al_read_directory</span></a><span class="k2">(</span> working_dir <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>    
<span class="number"> 35</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" read directory.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>    
<span class="number"> 37</span>    <span class="k1">if</span><span class="k2">(</span>file <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 38</span>    <span class="k2">{</span>
<span class="number"> 39</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" file is NULL.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>       <span class="k1">return</span> QUIT_PROGRAM<span class="k2">;</span>
<span class="number"> 41</span>    
<span class="number"> 42</span>    <span class="k2">}</span>
<span class="number"> 43</span>    
<span class="number"> 44</span>    <span class="c">/* const char * */</span> frd_filename <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_fs_entry_name"><span class="a">al_get_fs_entry_name</span></a><span class="k2">(</span> file <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>    
<span class="number"> 46</span>    <span class="k1">if</span><span class="k2">(</span> frd_filename <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 47</span>    <span class="k2">{</span>
<span class="number"> 48</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" frd_filename NULL.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span>       <span class="k1">return</span> QUIT_PROGRAM<span class="k2">;</span>
<span class="number"> 50</span>    <span class="k2">}</span>
<span class="number"> 51</span>    
<span class="number"> 52</span>    path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_path"><span class="a">al_create_path</span></a><span class="k2">(</span> frd_filename <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>    
<span class="number"> 54</span>    extension <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_path_extension"><span class="a">al_get_path_extension</span></a><span class="k2">(</span> path <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>    
<span class="number"> 56</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" extension = %s"</span>, extension<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>    
<span class="number"> 58</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" comparing string.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span>    
<span class="number"> 60</span>    <span class="k1">if</span><span class="k2">(</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span> extension, <span class="s">".frd"</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 61</span>    <span class="k2">{</span>
<span class="number"> 62</span>      
<span class="number"> 63</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span>frd_filenames<span class="k2">[</span>count<span class="k2">]</span>, <a href="http://www.allegro.cc/manual/al_get_path_filename"><span class="a">al_get_path_filename</span></a><span class="k2">(</span> path <span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 64</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s\n"</span>, frd_filenames<span class="k2">[</span>count<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 65</span>      <span class="k3">+</span><span class="k3">+</span>count<span class="k2">;</span>
<span class="number"> 66</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">" count is %d.\n"</span>, count<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 67</span>    <span class="k2">}</span>
<span class="number"> 68</span>    
<span class="number"> 69</span>    
<span class="number"> 70</span>    
<span class="number"> 71</span>    <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 72</span>    <span class="c">//al_destroy_fs_entry(file);</span>
<span class="number"> 73</span>    
<span class="number"> 74</span>  <span class="k2">}</span>
</div></div><p>


This line </p><p>frd_filenames = malloc( sizeof(char) * num_frd_files );</p><p>should have been</p><p>frd_filenames = malloc( sizeof(char *) * num_frd_files );</p><p>Not sure why it was causing the crash though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Tue, 28 Dec 2010 04:59:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/605915/896408#target">William Labbett</a> said:</div><div class="quote"><p> frd_filenames = malloc( sizeof(char) * num_frd_files );</p></div></div><p>only allocates &quot;num_frd_files&quot; bytes.  You can&#39;t put a filename (with terminator) into one char, and you can&#39;t fit a pointer into it (4 bytes for 32 bit OS, 8 bytes for 64 bit).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 28 Dec 2010 05:04:07 +0000</pubDate>
	</item>
</rss>
