filex_directory_local_path_test.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  1. /* This FileX test concentrates on the local path operations. */
  2. #ifndef FX_STANDALONE_ENABLE
  3. #include "tx_api.h"
  4. #include "fx_api.h"
  5. #include "fx_ram_driver_test.h"
  6. #include <stdio.h>
  7. #define DEMO_STACK_SIZE 8192
  8. #define CACHE_SIZE 16*128
  9. /* Define the ThreadX and FileX object control blocks... */
  10. static TX_THREAD ftest_0;
  11. static FX_MEDIA ram_disk;
  12. static UINT error_counter = 0;
  13. /* Define the counters used in the test application... */
  14. static UCHAR *ram_disk_memory;
  15. static UCHAR *cache_buffer;
  16. static UINT expected_index = 0;
  17. static CHAR * expected_name[] = {
  18. "RootFile01",
  19. "RootFile02",
  20. "RootDir03",
  21. ".",
  22. "..",
  23. "RootDir03_SubDir01",
  24. ".",
  25. "..",
  26. "RootDir03_File02",
  27. "RootDir03_SubDir03",
  28. ".",
  29. "..",
  30. "RootDir03_File04",
  31. "RootDir03_SubDir05",
  32. ".",
  33. "..",
  34. "RootDir03_File06",
  35. "RootDir03_SubDir07",
  36. ".",
  37. "..",
  38. "RootDir03_File08",
  39. "RootDir04",
  40. ".",
  41. "..",
  42. "RootDir04_File01",
  43. "RootDir04_File02",
  44. "RootDir04_SubDir03",
  45. ".",
  46. "..",
  47. "RootDir04_SubDir03_SubSubDir01",
  48. ".",
  49. "..",
  50. "RootDir04_SubDir03_SubSubDir02",
  51. ".",
  52. "..",
  53. "RootDir04_SubDir03_SubSubDir03",
  54. ".",
  55. "..",
  56. "RootDir04_SubDir03_SubSubFile04",
  57. "RootDir04_SubDir04",
  58. ".",
  59. "..",
  60. "RootDir04_SubDir04_SubSubDir01",
  61. ".",
  62. "..",
  63. "RootDir04_SubDir04_SubSubDir01_SubSubSubDir01",
  64. ".",
  65. "..",
  66. "RootDir04_SubDir04_SubSubDir01_SubSubSubDir02",
  67. ".",
  68. "..",
  69. "RootDir04_SubDir04_SubSubDir01_SubSubSubDir03",
  70. ".",
  71. "..",
  72. "RootDir04_SubDir04_SubSubDir01_SubSubSubFile04",
  73. "RootDir04_SubDir04_SubSubDir02",
  74. ".",
  75. "..",
  76. "RootDir04_SubDir04_SubSubDir01_SubSubSubDir01",
  77. ".",
  78. "..",
  79. "RootDir04_SubDir04_SubSubDir01_SubSubSubDir02",
  80. ".",
  81. "..",
  82. "RootDir04_SubDir04_SubSubDir01_SubSubSubDir03",
  83. ".",
  84. "..",
  85. "RootDir04_SubDir04_SubSubDir01_SubSubSubFile04",
  86. "RootDir04_SubDir04_SubSubDir03",
  87. ".",
  88. "..",
  89. "RootDir04_SubDir04_SubSubDir01_SubSubSubDir01",
  90. ".",
  91. "..",
  92. "RootDir04_SubDir04_SubSubDir01_SubSubSubDir02",
  93. ".",
  94. "..",
  95. "RootDir04_SubDir04_SubSubDir01_SubSubSubDir03",
  96. ".",
  97. "..",
  98. "RootDir04_SubDir04_SubSubDir01_SubSubSubFile04",
  99. "RootDir04_SubDir04_SubSubFile04",
  100. "RootDir04_SubDir05",
  101. ".",
  102. "..",
  103. "RootDir04_SubDir05_SubSubDir01",
  104. ".",
  105. "..",
  106. "RootDir04_SubDir05_SubSubDir02",
  107. ".",
  108. "..",
  109. "RootDir04_SubDir05_SubSubDir03",
  110. ".",
  111. "..",
  112. "RootDir04_SubDir05_SubSubFile04",
  113. "RootDir04_SubDir08_SubSubFile04",
  114. "RootDir04_File06",
  115. "RootDir04_File07",
  116. "RootDir04_SubDir08",
  117. ".",
  118. "..",
  119. "RootDir04_SubDir08_SubSubDir01",
  120. ".",
  121. "..",
  122. "RootDir04_SubDir08_SubSubDir02",
  123. ".",
  124. "..",
  125. "RootDir04_SubDir08_SubSubDir03",
  126. ".",
  127. "..",
  128. "RootDir05",
  129. ".",
  130. "..",
  131. "RootDir05_File02",
  132. "RootDir05_File03",
  133. "RootDir05_File04",
  134. "RootDir05_SubDir05",
  135. ".",
  136. "..",
  137. "RootDir05_SubDir06",
  138. ".",
  139. "..",
  140. "RootDir05_SubDir07",
  141. ".",
  142. "..",
  143. "RootDir05_File08",
  144. "RootDir05_SubDir09",
  145. ".",
  146. "..",
  147. "RootDir06",
  148. ".",
  149. "..",
  150. "RootDir06_SubDir01",
  151. ".",
  152. "..",
  153. "RootDir06_SubDir02",
  154. ".",
  155. "..",
  156. "RootDir06_SubDir03",
  157. ".",
  158. "..",
  159. "RootDir06_File04",
  160. "RootDir06_File05",
  161. "RootDir06_File06",
  162. "RootDir06_File07",
  163. "RootDir06_SubDir08",
  164. ".",
  165. "..",
  166. "RootDir07",
  167. ".",
  168. "..",
  169. "RootDir07_SubDir01",
  170. ".",
  171. "..",
  172. "RootDir07_SubDir02",
  173. ".",
  174. "..",
  175. "RootDir07_SubDir03",
  176. ".",
  177. "..",
  178. "RootDir07_SubDir04",
  179. ".",
  180. "..",
  181. "RootDir07_File05",
  182. "RootDir07_File06",
  183. "RootDir07_File07",
  184. "RootDir07_File08",
  185. "RootDir08",
  186. ".",
  187. "..",
  188. "RootDir08_File01",
  189. "RootDir08_File02",
  190. "RootDir08_File03",
  191. "RootDir08_File04",
  192. "RootDir08_SubDir05",
  193. ".",
  194. "..",
  195. "RootDir08_SubDir06",
  196. ".",
  197. "..",
  198. "RootDir08_SubDir07",
  199. ".",
  200. "..",
  201. "RootDir08_SubDir08",
  202. ".",
  203. "..",
  204. "RootFile09",
  205. "RootFile10",
  206. "RootDir11",
  207. ".",
  208. "..",
  209. "RootDir11_File01",
  210. "RootDir11_File02",
  211. "RootDir11_SubDir03",
  212. ".",
  213. "..",
  214. "RootDir11_SubDir04",
  215. ".",
  216. "..",
  217. "RootDir11_File05",
  218. "RootDir11_File06",
  219. "RootDir11_SubDir07",
  220. ".",
  221. "..",
  222. "RootDir11_SubDir08",
  223. ".",
  224. "..",
  225. "RootDir12",
  226. ".",
  227. "..",
  228. "RootDir12_File01",
  229. "RootDir12_File02",
  230. "RootDir12_SubDir03",
  231. ".",
  232. "..",
  233. "RootDir12_SubDir04",
  234. ".",
  235. "..",
  236. "RootDir12_File05",
  237. "RootDir12_File06",
  238. "RootDir12_SubDir07",
  239. ".",
  240. "..",
  241. "RootDir12_SubDir08",
  242. ".",
  243. "..",
  244. "RootDir13",
  245. ".",
  246. "..",
  247. "RootDir13_File01",
  248. "RootDir13_File02",
  249. "RootDir13_SubDir03",
  250. ".",
  251. "..",
  252. "RootDir13_SubDir04",
  253. ".",
  254. "..",
  255. "RootDir13_File05",
  256. "RootDir13_File06",
  257. "RootDir13_SubDir07",
  258. ".",
  259. "..",
  260. "RootDir13_SubDir08",
  261. ".",
  262. "..",
  263. "RootDir14",
  264. ".",
  265. "..",
  266. "RootFile15",
  267. "END"};
  268. /* Define thread prototypes. */
  269. void filex_directory_local_path_application_define(void *first_unused_memory);
  270. static void ftest_0_entry(ULONG thread_input);
  271. static void traverse_directory(CHAR *directory_name);
  272. static void last_character_compare_test();
  273. VOID _fx_ram_driver(FX_MEDIA *media_ptr);
  274. void test_control_return(UINT status);
  275. /* Define what the initial system looks like. */
  276. #ifdef CTEST
  277. void test_application_define(void *first_unused_memory)
  278. #else
  279. void filex_directory_local_path_application_define(void *first_unused_memory)
  280. #endif
  281. {
  282. UCHAR *pointer;
  283. /* Setup the working pointer. */
  284. pointer = (UCHAR *) first_unused_memory;
  285. /* Create the main thread. */
  286. tx_thread_create(&ftest_0, "thread 0", ftest_0_entry, 0,
  287. pointer, DEMO_STACK_SIZE,
  288. 4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
  289. pointer = pointer + DEMO_STACK_SIZE;
  290. /* Setup memory for the RAM disk and the sector cache. */
  291. cache_buffer = pointer;
  292. pointer = pointer + CACHE_SIZE;
  293. ram_disk_memory = pointer;
  294. memset(ram_disk_memory, 0xbf, 512*128);
  295. /* Initialize the FileX system. */
  296. fx_system_initialize();
  297. }
  298. /* Define the test threads. */
  299. static void ftest_0_entry(ULONG thread_input)
  300. {
  301. UINT status;
  302. FX_LOCAL_PATH local_path;
  303. CHAR *path_name;
  304. CHAR path_name_buffer[32];
  305. FX_PARAMETER_NOT_USED(thread_input);
  306. /* Print out some test information banners. */
  307. printf("FileX Test: Directory local path test..............................");
  308. /* Format the media. This needs to be done before opening it! */
  309. status = fx_media_format(&ram_disk,
  310. _fx_ram_driver, // Driver entry
  311. ram_disk_memory, // RAM disk memory pointer
  312. cache_buffer, // Media buffer pointer
  313. CACHE_SIZE, // Media buffer size
  314. "MY_RAM_DISK", // Volume Name
  315. 1, // Number of FATs
  316. 32, // Directory Entries
  317. 0, // Hidden sectors
  318. 512, // Total sectors
  319. 128, // Sector size
  320. 1, // Sectors per cluster
  321. 1, // Heads
  322. 1); // Sectors per track
  323. /* Determine if the format had an error. */
  324. if (status)
  325. {
  326. printf("ERROR!\n");
  327. test_control_return(1);
  328. }
  329. /* Attempt to clear the local path before the media has been opened to generate an error */
  330. status = fx_directory_local_path_clear(&ram_disk);
  331. if (status != FX_MEDIA_NOT_OPEN)
  332. {
  333. printf("ERROR!\n");
  334. test_control_return(2);
  335. }
  336. /* Attempt to restore the local path before the media has been opened to generate an error */
  337. status = fx_directory_local_path_restore(&ram_disk, &local_path);
  338. if (status != FX_MEDIA_NOT_OPEN)
  339. {
  340. printf("ERROR!\n");
  341. test_control_return(3);
  342. }
  343. /* Attempt to set the local path before the media has been opened to generate an error */
  344. status = fx_directory_local_path_set(&ram_disk, &local_path, "/A0");
  345. if (status != FX_MEDIA_NOT_OPEN)
  346. {
  347. printf("ERROR!\n");
  348. test_control_return(4);
  349. }
  350. /* Open the ram_disk. */
  351. status = fx_media_open(&ram_disk, "RAM DISK", _fx_ram_driver, ram_disk_memory, cache_buffer, CACHE_SIZE);
  352. /* Check the status. */
  353. if (status != FX_SUCCESS)
  354. {
  355. /* Error, return error code. */
  356. printf("ERROR!\n");
  357. test_control_return(5);
  358. }
  359. /* Attempt to set the local path to somewhere that does not exist to generate an error */
  360. status = fx_directory_local_path_set(&ram_disk, &local_path, "/DOES_NOT_EXIST");
  361. if (status != FX_INVALID_PATH)
  362. {
  363. printf("ERROR!\n");
  364. test_control_return(6);
  365. }
  366. /* Create a hiearchy of files and sub-directories. */
  367. status = fx_file_create(&ram_disk, "RootFile01");
  368. status += fx_file_create(&ram_disk, "RootFile02");
  369. status += fx_directory_create(&ram_disk, "RootDir03");
  370. status += fx_directory_create(&ram_disk, "RootDir04");
  371. status += fx_directory_create(&ram_disk, "RootDir05");
  372. status += fx_directory_create(&ram_disk, "RootDir06");
  373. status += fx_directory_create(&ram_disk, "RootDir07");
  374. status += fx_directory_create(&ram_disk, "RootDir08");
  375. status += fx_file_create(&ram_disk, "RootFile09");
  376. status += fx_file_create(&ram_disk, "RootFile10");
  377. status += fx_directory_create(&ram_disk, "RootDir11");
  378. status += fx_directory_create(&ram_disk, "RootDir12");
  379. status += fx_directory_create(&ram_disk, "RootDir13");
  380. status += fx_directory_create(&ram_disk, "RootDir14");
  381. status += fx_file_create(&ram_disk, "RootFile15");
  382. /* Create the sub-directories for RootDir03. */
  383. status += fx_directory_create(&ram_disk, "/RootDir03/RootDir03_SubDir01");
  384. status += fx_file_create(&ram_disk, "/RootDir03/RootDir03_File02");
  385. status += fx_directory_create(&ram_disk, "/RootDir03/RootDir03_SubDir03");
  386. status += fx_file_create(&ram_disk, "/RootDir03/RootDir03_File04");
  387. status += fx_directory_create(&ram_disk, "/RootDir03/RootDir03_SubDir05");
  388. status += fx_file_create(&ram_disk, "/RootDir03/RootDir03_File06");
  389. status += fx_directory_create(&ram_disk, "/RootDir03/RootDir03_SubDir07");
  390. status += fx_file_create(&ram_disk, "/RootDir03/RootDir03_File08");
  391. /* Create the sub-directories for RootDir04. */
  392. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_File01");
  393. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_File02");
  394. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir03");
  395. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04");
  396. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir05");
  397. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_File06");
  398. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_File07");
  399. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir08");
  400. /* Create the sub-directories for RootDir05. */
  401. status += fx_file_create(&ram_disk, "/RootDir05/RootDir05_File02");
  402. status += fx_file_create(&ram_disk, "/RootDir05/RootDir05_File03");
  403. status += fx_file_create(&ram_disk, "/RootDir05/RootDir05_File04");
  404. status += fx_directory_create(&ram_disk, "/RootDir05/RootDir05_SubDir05");
  405. status += fx_directory_create(&ram_disk, "/RootDir05/RootDir05_SubDir06");
  406. status += fx_directory_create(&ram_disk, "/RootDir05/RootDir05_SubDir07");
  407. status += fx_file_create(&ram_disk, "/RootDir05/RootDir05_File08");
  408. status += fx_directory_create(&ram_disk, "/RootDir05/RootDir05_SubDir09");
  409. /* Create the sub-directories for RootDir06. */
  410. status += fx_directory_create(&ram_disk, "/RootDir06/RootDir06_SubDir01");
  411. status += fx_directory_create(&ram_disk, "/RootDir06/RootDir06_SubDir02");
  412. status += fx_directory_create(&ram_disk, "/RootDir06/RootDir06_SubDir03");
  413. status += fx_file_create(&ram_disk, "/RootDir06/RootDir06_File04");
  414. status += fx_file_create(&ram_disk, "/RootDir06/RootDir06_File05");
  415. status += fx_file_create(&ram_disk, "/RootDir06/RootDir06_File06");
  416. status += fx_file_create(&ram_disk, "/RootDir06/RootDir06_File07");
  417. status += fx_directory_create(&ram_disk, "/RootDir06/RootDir06_SubDir08");
  418. /* Create the sub-directories for RootDir07. */
  419. status += fx_directory_create(&ram_disk, "/RootDir07/RootDir07_SubDir01");
  420. status += fx_directory_create(&ram_disk, "/RootDir07/RootDir07_SubDir02");
  421. status += fx_directory_create(&ram_disk, "/RootDir07/RootDir07_SubDir03");
  422. status += fx_directory_create(&ram_disk, "/RootDir07/RootDir07_SubDir04");
  423. status += fx_file_create(&ram_disk, "/RootDir07/RootDir07_File05");
  424. status += fx_file_create(&ram_disk, "/RootDir07/RootDir07_File06");
  425. status += fx_file_create(&ram_disk, "/RootDir07/RootDir07_File07");
  426. status += fx_file_create(&ram_disk, "/RootDir07/RootDir07_File08");
  427. /* Create the sub-directories for RootDir08. */
  428. status += fx_file_create(&ram_disk, "/RootDir08/RootDir08_File01");
  429. status += fx_file_create(&ram_disk, "/RootDir08/RootDir08_File02");
  430. status += fx_file_create(&ram_disk, "/RootDir08/RootDir08_File03");
  431. status += fx_file_create(&ram_disk, "/RootDir08/RootDir08_File04");
  432. status += fx_directory_create(&ram_disk, "/RootDir08/RootDir08_SubDir05");
  433. status += fx_directory_create(&ram_disk, "/RootDir08/RootDir08_SubDir06");
  434. status += fx_directory_create(&ram_disk, "/RootDir08/RootDir08_SubDir07");
  435. status += fx_directory_create(&ram_disk, "/RootDir08/RootDir08_SubDir08");
  436. /* Create the sub-directories for RootDir11. */
  437. status += fx_file_create(&ram_disk, "/RootDir11/RootDir11_File01");
  438. status += fx_file_create(&ram_disk, "/RootDir11/RootDir11_File02");
  439. status += fx_directory_create(&ram_disk, "/RootDir11/RootDir11_SubDir03");
  440. status += fx_directory_create(&ram_disk, "/RootDir11/RootDir11_SubDir04");
  441. status += fx_file_create(&ram_disk, "/RootDir11/RootDir11_File05");
  442. status += fx_file_create(&ram_disk, "/RootDir11/RootDir11_File06");
  443. status += fx_directory_create(&ram_disk, "/RootDir11/RootDir11_SubDir07");
  444. status += fx_directory_create(&ram_disk, "/RootDir11/RootDir11_SubDir08");
  445. /* Create the sub-directories for RootDir12. */
  446. status += fx_file_create(&ram_disk, "/RootDir12/RootDir12_File01");
  447. status += fx_file_create(&ram_disk, "/RootDir12/RootDir12_File02");
  448. status += fx_directory_create(&ram_disk, "/RootDir12/RootDir12_SubDir03");
  449. status += fx_directory_create(&ram_disk, "/RootDir12/RootDir12_SubDir04");
  450. status += fx_file_create(&ram_disk, "/RootDir12/RootDir12_File05");
  451. status += fx_file_create(&ram_disk, "/RootDir12/RootDir12_File06");
  452. status += fx_directory_create(&ram_disk, "/RootDir12/RootDir12_SubDir07");
  453. status += fx_directory_create(&ram_disk, "/RootDir12/RootDir12_SubDir08");
  454. /* Create the sub-directories for RootDir13. */
  455. status += fx_file_create(&ram_disk, "/RootDir13/RootDir13_File01");
  456. status += fx_file_create(&ram_disk, "/RootDir13/RootDir13_File02");
  457. status += fx_directory_create(&ram_disk, "/RootDir13/RootDir13_SubDir03");
  458. status += fx_directory_create(&ram_disk, "/RootDir13/RootDir13_SubDir04");
  459. status += fx_file_create(&ram_disk, "/RootDir13/RootDir13_File05");
  460. status += fx_file_create(&ram_disk, "/RootDir13/RootDir13_File06");
  461. status += fx_directory_create(&ram_disk, "/RootDir13/RootDir13_SubDir07");
  462. status += fx_directory_create(&ram_disk, "/RootDir13/RootDir13_SubDir08");
  463. /* Create the Sub-sub directories under RootDir04. */
  464. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir03/RootDir04_SubDir03_SubSubDir01");
  465. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir03/RootDir04_SubDir03_SubSubDir02");
  466. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir03/RootDir04_SubDir03_SubSubDir03");
  467. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_SubDir03/RootDir04_SubDir03_SubSubFile04");
  468. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir01");
  469. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir02");
  470. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir03");
  471. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubFile04");
  472. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir05/RootDir04_SubDir05_SubSubDir01");
  473. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir05/RootDir04_SubDir05_SubSubDir02");
  474. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir05/RootDir04_SubDir05_SubSubDir03");
  475. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_SubDir05/RootDir04_SubDir05_SubSubFile04");
  476. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir08/RootDir04_SubDir08_SubSubDir01");
  477. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir08/RootDir04_SubDir08_SubSubDir02");
  478. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir08/RootDir04_SubDir08_SubSubDir03");
  479. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_SubDir05/RootDir04_SubDir08_SubSubFile04");
  480. /* Create the sub-sub-sub directories under RootDir04. */
  481. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir01/RootDir04_SubDir04_SubSubDir01_SubSubSubDir01");
  482. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir01/RootDir04_SubDir04_SubSubDir01_SubSubSubDir02");
  483. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir01/RootDir04_SubDir04_SubSubDir01_SubSubSubDir03");
  484. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir01/RootDir04_SubDir04_SubSubDir01_SubSubSubFile04");
  485. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir02/RootDir04_SubDir04_SubSubDir01_SubSubSubDir01");
  486. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir02/RootDir04_SubDir04_SubSubDir01_SubSubSubDir02");
  487. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir02/RootDir04_SubDir04_SubSubDir01_SubSubSubDir03");
  488. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir02/RootDir04_SubDir04_SubSubDir01_SubSubSubFile04");
  489. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir03/RootDir04_SubDir04_SubSubDir01_SubSubSubDir01");
  490. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir03/RootDir04_SubDir04_SubSubDir01_SubSubSubDir02");
  491. status += fx_directory_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir03/RootDir04_SubDir04_SubSubDir01_SubSubSubDir03");
  492. status += fx_file_create(&ram_disk, "/RootDir04/RootDir04_SubDir04/RootDir04_SubDir04_SubSubDir03/RootDir04_SubDir04_SubSubDir01_SubSubSubFile04");
  493. /* Check the status. */
  494. if (status != FX_SUCCESS)
  495. {
  496. /* Error creating directory structure. Return to caller. */
  497. printf("ERROR!\n");
  498. test_control_return(7);
  499. }
  500. /* Traverse the directory structure recursively. */
  501. traverse_directory(FX_NULL);
  502. /* Determine if the traversal matched what was expected. */
  503. if (error_counter)
  504. {
  505. /* Nope, error traversing the directory structure! */
  506. printf("ERROR!\n");
  507. test_control_return(8);
  508. }
  509. status = fx_directory_local_path_clear(&ram_disk);
  510. status += fx_directory_local_path_set(&ram_disk, &local_path, "RootDir04");
  511. status += fx_directory_local_path_set(&ram_disk, &local_path, "../RootDir03");
  512. if (status != FX_SUCCESS)
  513. {
  514. printf("ERROR!\n");
  515. test_control_return(9);
  516. }
  517. fx_directory_local_path_get_copy(&ram_disk, path_name_buffer, sizeof(path_name_buffer));
  518. if (strcmp(path_name_buffer, "/RootDir03"))
  519. {
  520. printf("ERROR!\n");
  521. test_control_return(233);
  522. }
  523. /* Close the media. */
  524. status = fx_media_close(&ram_disk);
  525. return_if_fail(status == FX_SUCCESS);
  526. /* Format the media. This needs to be done before opening it! */
  527. status = fx_media_format(&ram_disk,
  528. _fx_ram_driver, // Driver entry
  529. ram_disk_memory, // RAM disk memory pointer
  530. cache_buffer, // Media buffer pointer
  531. CACHE_SIZE, // Media buffer size
  532. "MY_RAM_DISK", // Volume Name
  533. 1, // Number of FATs
  534. 32, // Directory Entries
  535. 0, // Hidden sectors
  536. 512, // Total sectors
  537. 128, // Sector size
  538. 1, // Sectors per cluster
  539. 1, // Heads
  540. 1); // Sectors per track
  541. return_if_fail(status == FX_SUCCESS);
  542. /* Try getting directory local path before media open. */
  543. status = fx_directory_local_path_get(&ram_disk, &path_name);
  544. return_if_fail(status == FX_MEDIA_NOT_OPEN);
  545. /* Open the ram_disk. */
  546. status = fx_media_open(&ram_disk, "RAM DISK", _fx_ram_driver, ram_disk_memory, cache_buffer, CACHE_SIZE);
  547. return_if_fail(status == FX_SUCCESS);
  548. /* Get local path. */
  549. status = fx_directory_local_path_get(&ram_disk, &path_name);
  550. return_if_fail(status == FX_SUCCESS);
  551. status = fx_directory_local_path_clear(&ram_disk);
  552. return_if_fail(status == FX_SUCCESS);
  553. /* Get local path after clearing. */
  554. status = fx_directory_local_path_get(&ram_disk, &path_name);
  555. return_if_fail(status == FX_SUCCESS);
  556. /* Test corner case where last character of fx_media_last_found_name is different from current path. */
  557. last_character_compare_test();
  558. printf("SUCCESS!\n");
  559. test_control_return(0);
  560. }
  561. /* Define the directory traversal routine for the local path test. */
  562. void traverse_directory(CHAR *directory_name)
  563. {
  564. FX_LOCAL_PATH local_path;
  565. FX_FILE file;
  566. UINT status;
  567. CHAR name[300];
  568. UINT skip;
  569. /* Determine if we are at the start. */
  570. if (directory_name == FX_NULL)
  571. {
  572. status = fx_directory_local_path_set(&ram_disk, &local_path, "\\");
  573. skip = 0;
  574. }
  575. else
  576. {
  577. status = fx_directory_local_path_set(&ram_disk, &local_path, directory_name);
  578. skip = 2;
  579. }
  580. /* Get the first directory entry in the root path. */
  581. status = fx_directory_first_entry_find(&ram_disk, name);
  582. /* Loop through the directory entries for this path. */
  583. while (status == FX_SUCCESS)
  584. {
  585. /* Compare with what is expected. */
  586. if (strcmp(name, expected_name[expected_index++]))
  587. error_counter++;
  588. /* Determine if this name is a directory or a file. */
  589. status = fx_directory_name_test(&ram_disk, name);
  590. /* What is it? */
  591. if (status == FX_NOT_DIRECTORY)
  592. {
  593. /* This is a file, open it to test its integrity. */
  594. status = fx_file_open(&ram_disk, &file, name, FX_OPEN_FOR_READ);
  595. if (status != FX_SUCCESS)
  596. error_counter++;
  597. status = fx_file_close(&file);
  598. if (status != FX_SUCCESS)
  599. error_counter++;
  600. /* Pickup the next directory entry. */
  601. status = fx_directory_next_entry_find(&ram_disk, name);
  602. }
  603. else if (status == FX_SUCCESS)
  604. {
  605. /* Skip the first two entries... */
  606. if (skip)
  607. skip--;
  608. else
  609. {
  610. /* Recursive call to traverse directory. */
  611. traverse_directory(name);
  612. /* Restore path. */
  613. status = fx_directory_local_path_restore(&ram_disk, &local_path);
  614. }
  615. status = fx_directory_next_entry_find(&ram_disk, name);
  616. }
  617. }
  618. fx_directory_local_path_clear(&ram_disk);
  619. /* Only run this if error checking is enabled */
  620. #ifndef FX_DISABLE_ERROR_CHECKING
  621. /* send null pointer to generate an error */
  622. status = fx_directory_local_path_clear(FX_NULL);
  623. if (status != FX_PTR_ERROR)
  624. {
  625. printf("ERROR!\n");
  626. test_control_return(11);
  627. }
  628. /* send null pointer to generate an error */
  629. status = fx_directory_local_path_restore(FX_NULL, FX_NULL);
  630. if (status != FX_PTR_ERROR)
  631. {
  632. printf("ERROR!\n");
  633. test_control_return(12);
  634. }
  635. /* send null pointer to generate an error */
  636. status = fx_directory_local_path_set(FX_NULL, FX_NULL, "\\");
  637. if (status != FX_PTR_ERROR)
  638. {
  639. printf("ERROR!\n");
  640. test_control_return(13);
  641. }
  642. /* send null pointer to generate an error */
  643. status = fx_directory_name_test(FX_NULL, name);
  644. if (status != FX_PTR_ERROR)
  645. {
  646. printf("ERROR!\n");
  647. test_control_return(14);
  648. }
  649. #endif /* FX_DISABLE_ERROR_CHECKING */
  650. }
  651. /* Test corner case where last character of fx_media_last_found_name is different from current path. */
  652. static void last_character_compare_test()
  653. {
  654. FX_FILE my_file;
  655. FX_LOCAL_PATH root_path, test1_path, test2_path;
  656. return_if_fail(fx_directory_local_path_set(&ram_disk, &root_path, "/") == FX_SUCCESS);
  657. return_if_fail(fx_directory_create(&ram_disk, "test_1") == FX_SUCCESS);
  658. return_if_fail(fx_directory_create(&ram_disk, "test_2") == FX_SUCCESS);
  659. return_if_fail(fx_directory_local_path_set(&ram_disk, &test1_path, "test_1") == FX_SUCCESS);
  660. return_if_fail(fx_directory_local_path_set(&ram_disk, &root_path, "/") == FX_SUCCESS);
  661. return_if_fail(fx_directory_local_path_set(&ram_disk, &test2_path, "test_2") == FX_SUCCESS);
  662. return_if_fail(fx_directory_local_path_restore(&ram_disk, &test1_path) == FX_SUCCESS);
  663. return_if_fail(fx_file_create(&ram_disk, "file_0001.txt") == FX_SUCCESS);
  664. return_if_fail(fx_file_open(&ram_disk, &my_file, "/test_1/file_0001.txt", FX_OPEN_FOR_READ) == FX_SUCCESS);
  665. return_if_fail(fx_file_close(&my_file) == FX_SUCCESS);
  666. return_if_fail(fx_directory_local_path_restore(&ram_disk, &test2_path) == FX_SUCCESS);
  667. return_if_fail(fx_file_create(&ram_disk, "file_0001.txt") == FX_SUCCESS);
  668. return_if_fail(fx_file_open(&ram_disk, &my_file, "/test_2/file_0001.txt", FX_OPEN_FOR_READ) == FX_SUCCESS);
  669. return_if_fail(fx_file_close(&my_file) == FX_SUCCESS);
  670. }
  671. #else
  672. #include "fx_api.h"
  673. #include "fx_ram_driver_test.h"
  674. #include <stdio.h>
  675. void test_control_return(UINT status);
  676. /* Define what the initial system looks like. */
  677. #ifdef CTEST
  678. void test_application_define(void *first_unused_memory)
  679. #else
  680. void filex_directory_local_path_application_define(void *first_unused_memory)
  681. #endif
  682. {
  683. FX_PARAMETER_NOT_USED(first_unused_memory);
  684. /* Print out some test information banners. */
  685. printf("FileX Test: Directory local path test..............................N/A\n");
  686. test_control_return(255);
  687. }
  688. #endif