<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>al_create_fs_entry not working second time after calling destructor</title>
		<link>http://www.allegro.cc/forums/view/613828</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 27 Jan 2014 13:43:06 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Anyway basically what happens is that I have a main menu and I start the game this creates a game object and that creates a graphicSetBundle object which is where I am using al_create_fs_entry then from the ingame menu I quit back to main menu calling the game destructor and any others required.</p><p>Now the problem is that the second time I run the game it doesn&#39;t work. al_fs_entry_exists(gfxsetPath) returns false and most interestingly to me is that gfxsetPath instead of giving the full path D:\blah\graphics\sets it has the value of ../graphics/sets</p><p>This is what gfxsetsDir is equal to in both cases but it does not appear to work/give the same result the second time and I don&#39;t understand why</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>GraphicSetBundle::GraphicSetBundle<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>gfxsetsDir<span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FS_ENTRY"><span class="a">ALLEGRO_FS_ENTRY</span></a> <span class="k3">*</span>gfxsetPath <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_fs_entry"><span class="a">al_create_fs_entry</span></a><span class="k2">(</span>gfxsetsDir<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>  std::vector<span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/ALLEGRO_FS_ENTRY"><span class="a">ALLEGRO_FS_ENTRY</span></a> <span class="k3">*</span><span class="k3">&gt;</span> gfxSetFilePaths<span class="k2">;</span>
<span class="number">  6</span>  <a href="http://www.allegro.cc/manual/al_open_directory"><span class="a">al_open_directory</span></a><span class="k2">(</span>gfxsetPath<span class="k2">)</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">"gfxsetpath: %s\n"</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>gfxsetPath<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"isexist?:%i\n"</span>,<a href="http://www.allegro.cc/manual/al_fs_entry_exists"><span class="a">al_fs_entry_exists</span></a><span class="k2">(</span>gfxsetPath<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FS_ENTRY"><span class="a">ALLEGRO_FS_ENTRY</span></a> <span class="k3">*</span>next<span class="k2">;</span>
<span class="number"> 11</span>  <span class="k1">do</span>
<span class="number"> 12</span>  <span class="k2">{</span>
<span class="number"> 13</span>    next <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>gfxsetPath<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">if</span><span class="k2">(</span>next <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 15</span>    <span class="k2">{</span>
<span class="number"> 16</span>      gfxSetFilePaths.push_back<span class="k2">(</span>next<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>    <span class="k2">}</span>
<span class="number"> 18</span>  <span class="k2">}</span>
<span class="number"> 19</span>  <span class="k1">while</span><span class="k2">(</span>next <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  <a href="http://www.allegro.cc/manual/al_close_directory"><span class="a">al_close_directory</span></a><span class="k2">(</span>gfxsetPath<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>  
<span class="number"> 22</span>  <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>gfxSetFilePaths.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number"> 23</span>  <span class="k2">{</span>
<span class="number"> 24</span>    currentPath_ <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><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>gfxSetFilePaths<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>    bundle_.insert<span class="k2">(</span> std::make_pair<span class="k3">&lt;</span>std::string, GraphicSet<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_path_basename"><span class="a">al_get_path_basename</span></a><span class="k2">(</span>currentPath_<span class="k2">)</span>, <span class="k1">new</span> GraphicSet<span class="k2">(</span>currentPath_<span class="k2">)</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>  <span class="k2">}</span>
<span class="number"> 27</span>
<span class="number"> 28</span>
<span class="number"> 29</span>  <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>gfxSetFilePaths.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number"> 30</span>  <span class="k2">{</span>
<span class="number"> 31</span>    <a href="http://www.allegro.cc/manual/al_destroy_fs_entry"><span class="a">al_destroy_fs_entry</span></a><span class="k2">(</span>gfxSetFilePaths.at<span class="k2">(</span>i<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>  <span class="k2">}</span>
<span class="number"> 33</span>  <a href="http://www.allegro.cc/manual/al_destroy_fs_entry"><span class="a">al_destroy_fs_entry</span></a><span class="k2">(</span>next<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span>  <a href="http://www.allegro.cc/manual/al_close_directory"><span class="a">al_close_directory</span></a><span class="k2">(</span>gfxsetPath<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>  <a href="http://www.allegro.cc/manual/al_destroy_fs_entry"><span class="a">al_destroy_fs_entry</span></a><span class="k2">(</span>gfxsetPath<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>
<span class="number"> 38</span><span class="k2">}</span>
</div></div><p>

This is being compiled on Windows 8.1 x64 with Visual Studio 2010 not that it should matter. Hopefully that is enough code because there is a fair bit of code if the problem is elsewhere and it may not necessarily be particularly tidy code. I can say everything worked (apart from the memory leaks) as it should before I started loading graphics with physfs. (my hardcoded paths and global variables were annoying me) </p><p>Edit: it would appear its not the fact that I am deleting my GraphicSetBundle or the Game object that it is created in is the problem. If I create multiple GraphicSetBundles than only the first one will work even if the intended directory is different.</p><p>Edit Again: Problem Solved ! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> I had used al_set_standard_file_interface() instead of using al_set_standard_fs_interface() so presumably it was still using physfs when it wasn&#39;t supposed to all good now then.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (awergh)</author>
		<pubDate>Mon, 27 Jan 2014 13:43:06 +0000</pubDate>
	</item>
</rss>
