1753ac610SCharles Manning /*
2753ac610SCharles Manning * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
3753ac610SCharles Manning *
4753ac610SCharles Manning * Copyright (C) 2002-2007 Aleph One Ltd.
5753ac610SCharles Manning * for Toby Churchill Ltd and Brightstar Engineering
6753ac610SCharles Manning *
7753ac610SCharles Manning * Created by Charles Manning <charles@aleph1.co.uk>
8753ac610SCharles Manning *
9753ac610SCharles Manning * This program is free software; you can redistribute it and/or modify
10753ac610SCharles Manning * it under the terms of the GNU General Public License version 2 as
11753ac610SCharles Manning * published by the Free Software Foundation.
12753ac610SCharles Manning */
13753ac610SCharles Manning
14753ac610SCharles Manning /*
15753ac610SCharles Manning * yaffscfg.c The configuration for the "direct" use of yaffs.
16753ac610SCharles Manning *
17753ac610SCharles Manning * This is set up for u-boot.
18753ac610SCharles Manning *
19753ac610SCharles Manning * This version now uses the ydevconfig mechanism to set up partitions.
20753ac610SCharles Manning */
21753ac610SCharles Manning
22753ac610SCharles Manning #include <common.h>
236b44adc2STom Rini #include <div64.h>
24753ac610SCharles Manning
25753ac610SCharles Manning #include <config.h>
26753ac610SCharles Manning #include "nand.h"
27753ac610SCharles Manning #include "yaffscfg.h"
28753ac610SCharles Manning #include "yaffsfs.h"
29753ac610SCharles Manning #include "yaffs_packedtags2.h"
30753ac610SCharles Manning #include "yaffs_mtdif.h"
31753ac610SCharles Manning #include "yaffs_mtdif2.h"
32753ac610SCharles Manning #if 0
33753ac610SCharles Manning #include <errno.h>
34753ac610SCharles Manning #else
35753ac610SCharles Manning #include "malloc.h"
36753ac610SCharles Manning #endif
37753ac610SCharles Manning
38753ac610SCharles Manning unsigned yaffs_trace_mask = 0x0; /* Disable logging */
39753ac610SCharles Manning static int yaffs_errno;
40753ac610SCharles Manning
41753ac610SCharles Manning
yaffs_bug_fn(const char * fn,int n)42753ac610SCharles Manning void yaffs_bug_fn(const char *fn, int n)
43753ac610SCharles Manning {
44753ac610SCharles Manning printf("yaffs bug at %s:%d\n", fn, n);
45753ac610SCharles Manning }
46753ac610SCharles Manning
yaffsfs_malloc(size_t x)47753ac610SCharles Manning void *yaffsfs_malloc(size_t x)
48753ac610SCharles Manning {
49753ac610SCharles Manning return malloc(x);
50753ac610SCharles Manning }
51753ac610SCharles Manning
yaffsfs_free(void * x)52753ac610SCharles Manning void yaffsfs_free(void *x)
53753ac610SCharles Manning {
54753ac610SCharles Manning free(x);
55753ac610SCharles Manning }
56753ac610SCharles Manning
yaffsfs_SetError(int err)57753ac610SCharles Manning void yaffsfs_SetError(int err)
58753ac610SCharles Manning {
59753ac610SCharles Manning yaffs_errno = err;
60753ac610SCharles Manning }
61753ac610SCharles Manning
yaffsfs_GetLastError(void)62753ac610SCharles Manning int yaffsfs_GetLastError(void)
63753ac610SCharles Manning {
64753ac610SCharles Manning return yaffs_errno;
65753ac610SCharles Manning }
66753ac610SCharles Manning
67753ac610SCharles Manning
yaffsfs_GetError(void)68753ac610SCharles Manning int yaffsfs_GetError(void)
69753ac610SCharles Manning {
70753ac610SCharles Manning return yaffs_errno;
71753ac610SCharles Manning }
72753ac610SCharles Manning
yaffsfs_Lock(void)73753ac610SCharles Manning void yaffsfs_Lock(void)
74753ac610SCharles Manning {
75753ac610SCharles Manning }
76753ac610SCharles Manning
yaffsfs_Unlock(void)77753ac610SCharles Manning void yaffsfs_Unlock(void)
78753ac610SCharles Manning {
79753ac610SCharles Manning }
80753ac610SCharles Manning
yaffsfs_CurrentTime(void)81753ac610SCharles Manning __u32 yaffsfs_CurrentTime(void)
82753ac610SCharles Manning {
83753ac610SCharles Manning return 0;
84753ac610SCharles Manning }
85753ac610SCharles Manning
yaffs_malloc(size_t size)86753ac610SCharles Manning void *yaffs_malloc(size_t size)
87753ac610SCharles Manning {
88753ac610SCharles Manning return malloc(size);
89753ac610SCharles Manning }
90753ac610SCharles Manning
yaffs_free(void * ptr)91753ac610SCharles Manning void yaffs_free(void *ptr)
92753ac610SCharles Manning {
93753ac610SCharles Manning free(ptr);
94753ac610SCharles Manning }
95753ac610SCharles Manning
yaffsfs_LocalInitialisation(void)96753ac610SCharles Manning void yaffsfs_LocalInitialisation(void)
97753ac610SCharles Manning {
98753ac610SCharles Manning /* No locking used */
99753ac610SCharles Manning }
100753ac610SCharles Manning
101753ac610SCharles Manning
yaffs_file_type_str(struct yaffs_stat * stat)102753ac610SCharles Manning static const char *yaffs_file_type_str(struct yaffs_stat *stat)
103753ac610SCharles Manning {
104753ac610SCharles Manning switch (stat->st_mode & S_IFMT) {
105753ac610SCharles Manning case S_IFREG: return "regular file";
106753ac610SCharles Manning case S_IFDIR: return "directory";
107753ac610SCharles Manning case S_IFLNK: return "symlink";
108753ac610SCharles Manning default: return "unknown";
109753ac610SCharles Manning }
110753ac610SCharles Manning }
111753ac610SCharles Manning
yaffs_error_str(void)112753ac610SCharles Manning static const char *yaffs_error_str(void)
113753ac610SCharles Manning {
114753ac610SCharles Manning int error = yaffsfs_GetLastError();
115753ac610SCharles Manning
116753ac610SCharles Manning if (error < 0)
117753ac610SCharles Manning error = -error;
118753ac610SCharles Manning
119753ac610SCharles Manning switch (error) {
120753ac610SCharles Manning case EBUSY: return "Busy";
121753ac610SCharles Manning case ENODEV: return "No such device";
122753ac610SCharles Manning case EINVAL: return "Invalid parameter";
123753ac610SCharles Manning case ENFILE: return "Too many open files";
124753ac610SCharles Manning case EBADF: return "Bad handle";
125753ac610SCharles Manning case EACCES: return "Wrong permissions";
126753ac610SCharles Manning case EXDEV: return "Not on same device";
127753ac610SCharles Manning case ENOENT: return "No such entry";
128753ac610SCharles Manning case ENOSPC: return "Device full";
129753ac610SCharles Manning case EROFS: return "Read only file system";
130753ac610SCharles Manning case ERANGE: return "Range error";
131753ac610SCharles Manning case ENOTEMPTY: return "Not empty";
132753ac610SCharles Manning case ENAMETOOLONG: return "Name too long";
133753ac610SCharles Manning case ENOMEM: return "Out of memory";
134753ac610SCharles Manning case EFAULT: return "Fault";
135753ac610SCharles Manning case EEXIST: return "Name exists";
136753ac610SCharles Manning case ENOTDIR: return "Not a directory";
137753ac610SCharles Manning case EISDIR: return "Not permitted on a directory";
138753ac610SCharles Manning case ELOOP: return "Symlink loop";
139753ac610SCharles Manning case 0: return "No error";
140753ac610SCharles Manning default: return "Unknown error";
141753ac610SCharles Manning }
142753ac610SCharles Manning }
143753ac610SCharles Manning
cmd_yaffs_tracemask(unsigned set,unsigned mask)144753ac610SCharles Manning void cmd_yaffs_tracemask(unsigned set, unsigned mask)
145753ac610SCharles Manning {
146753ac610SCharles Manning if (set)
147753ac610SCharles Manning yaffs_trace_mask = mask;
148753ac610SCharles Manning
149753ac610SCharles Manning printf("yaffs trace mask: %08x\n", yaffs_trace_mask);
150753ac610SCharles Manning }
151753ac610SCharles Manning
yaffs_regions_overlap(int a,int b,int x,int y)152753ac610SCharles Manning static int yaffs_regions_overlap(int a, int b, int x, int y)
153753ac610SCharles Manning {
154753ac610SCharles Manning return (a <= x && x <= b) ||
155753ac610SCharles Manning (a <= y && y <= b) ||
156753ac610SCharles Manning (x <= a && a <= y) ||
157753ac610SCharles Manning (x <= b && b <= y);
158753ac610SCharles Manning }
159753ac610SCharles Manning
cmd_yaffs_devconfig(char * _mp,int flash_dev,int start_block,int end_block)160753ac610SCharles Manning void cmd_yaffs_devconfig(char *_mp, int flash_dev,
161753ac610SCharles Manning int start_block, int end_block)
162753ac610SCharles Manning {
163753ac610SCharles Manning struct mtd_info *mtd = NULL;
164753ac610SCharles Manning struct yaffs_dev *dev = NULL;
165753ac610SCharles Manning struct yaffs_dev *chk;
166753ac610SCharles Manning char *mp = NULL;
167753ac610SCharles Manning struct nand_chip *chip;
168753ac610SCharles Manning
169eb6a5c3cSGrygorii Strashko mtd = get_nand_dev_by_index(flash_dev);
170eb6a5c3cSGrygorii Strashko if (!mtd) {
171*90aa625cSMasahiro Yamada pr_err("\nno NAND devices available\n");
172eb6a5c3cSGrygorii Strashko return;
173eb6a5c3cSGrygorii Strashko }
174eb6a5c3cSGrygorii Strashko
175753ac610SCharles Manning dev = calloc(1, sizeof(*dev));
176753ac610SCharles Manning mp = strdup(_mp);
177753ac610SCharles Manning
178753ac610SCharles Manning if (!dev || !mp) {
179753ac610SCharles Manning /* Alloc error */
180753ac610SCharles Manning printf("Failed to allocate memory\n");
181753ac610SCharles Manning goto err;
182753ac610SCharles Manning }
183753ac610SCharles Manning
184753ac610SCharles Manning if (flash_dev >= CONFIG_SYS_MAX_NAND_DEVICE) {
185753ac610SCharles Manning printf("Flash device invalid\n");
186753ac610SCharles Manning goto err;
187753ac610SCharles Manning }
188753ac610SCharles Manning
189753ac610SCharles Manning if (end_block == 0)
1906b44adc2STom Rini end_block = lldiv(mtd->size, mtd->erasesize - 1);
191753ac610SCharles Manning
192753ac610SCharles Manning if (end_block < start_block) {
193753ac610SCharles Manning printf("Bad start/end\n");
194753ac610SCharles Manning goto err;
195753ac610SCharles Manning }
196753ac610SCharles Manning
19717cb4b8fSScott Wood chip = mtd_to_nand(mtd);
198753ac610SCharles Manning
199753ac610SCharles Manning /* Check for any conflicts */
200753ac610SCharles Manning yaffs_dev_rewind();
201753ac610SCharles Manning while (1) {
202753ac610SCharles Manning chk = yaffs_next_dev();
203753ac610SCharles Manning if (!chk)
204753ac610SCharles Manning break;
205753ac610SCharles Manning if (strcmp(chk->param.name, mp) == 0) {
206753ac610SCharles Manning printf("Mount point name already used\n");
207753ac610SCharles Manning goto err;
208753ac610SCharles Manning }
209753ac610SCharles Manning if (chk->driver_context == mtd &&
210753ac610SCharles Manning yaffs_regions_overlap(
211753ac610SCharles Manning chk->param.start_block, chk->param.end_block,
212753ac610SCharles Manning start_block, end_block)) {
213753ac610SCharles Manning printf("Region overlaps with partition %s\n",
214753ac610SCharles Manning chk->param.name);
215753ac610SCharles Manning goto err;
216753ac610SCharles Manning }
217753ac610SCharles Manning
218753ac610SCharles Manning }
219753ac610SCharles Manning
220753ac610SCharles Manning /* Seems sane, so configure */
221753ac610SCharles Manning memset(dev, 0, sizeof(*dev));
222753ac610SCharles Manning dev->param.name = mp;
223753ac610SCharles Manning dev->driver_context = mtd;
224753ac610SCharles Manning dev->param.start_block = start_block;
225753ac610SCharles Manning dev->param.end_block = end_block;
226753ac610SCharles Manning dev->param.chunks_per_block = mtd->erasesize / mtd->writesize;
227753ac610SCharles Manning dev->param.total_bytes_per_chunk = mtd->writesize;
228753ac610SCharles Manning dev->param.is_yaffs2 = 1;
229753ac610SCharles Manning dev->param.use_nand_ecc = 1;
230753ac610SCharles Manning dev->param.n_reserved_blocks = 5;
231753ac610SCharles Manning if (chip->ecc.layout->oobavail < sizeof(struct yaffs_packed_tags2))
232753ac610SCharles Manning dev->param.inband_tags = 1;
233753ac610SCharles Manning dev->param.n_caches = 10;
234753ac610SCharles Manning dev->param.write_chunk_tags_fn = nandmtd2_write_chunk_tags;
235753ac610SCharles Manning dev->param.read_chunk_tags_fn = nandmtd2_read_chunk_tags;
236753ac610SCharles Manning dev->param.erase_fn = nandmtd_EraseBlockInNAND;
237753ac610SCharles Manning dev->param.initialise_flash_fn = nandmtd_InitialiseNAND;
238753ac610SCharles Manning dev->param.bad_block_fn = nandmtd2_MarkNANDBlockBad;
239753ac610SCharles Manning dev->param.query_block_fn = nandmtd2_QueryNANDBlock;
240753ac610SCharles Manning
241753ac610SCharles Manning yaffs_add_device(dev);
242753ac610SCharles Manning
243753ac610SCharles Manning printf("Configures yaffs mount %s: dev %d start block %d, end block %d %s\n",
244753ac610SCharles Manning mp, flash_dev, start_block, end_block,
245753ac610SCharles Manning dev->param.inband_tags ? "using inband tags" : "");
246753ac610SCharles Manning return;
247753ac610SCharles Manning
248753ac610SCharles Manning err:
249753ac610SCharles Manning free(dev);
250753ac610SCharles Manning free(mp);
251753ac610SCharles Manning }
252753ac610SCharles Manning
cmd_yaffs_dev_ls(void)253753ac610SCharles Manning void cmd_yaffs_dev_ls(void)
254753ac610SCharles Manning {
255753ac610SCharles Manning struct yaffs_dev *dev;
256753ac610SCharles Manning int flash_dev;
257753ac610SCharles Manning int free_space;
258753ac610SCharles Manning
259753ac610SCharles Manning yaffs_dev_rewind();
260753ac610SCharles Manning
261753ac610SCharles Manning while (1) {
262753ac610SCharles Manning dev = yaffs_next_dev();
263753ac610SCharles Manning if (!dev)
264753ac610SCharles Manning return;
265b616d9b0SScott Wood flash_dev = nand_mtd_to_devnum(dev->driver_context);
266753ac610SCharles Manning printf("%-10s %5d 0x%05x 0x%05x %s",
267753ac610SCharles Manning dev->param.name, flash_dev,
268753ac610SCharles Manning dev->param.start_block, dev->param.end_block,
269753ac610SCharles Manning dev->param.inband_tags ? "using inband tags, " : "");
270753ac610SCharles Manning
271753ac610SCharles Manning free_space = yaffs_freespace(dev->param.name);
272753ac610SCharles Manning if (free_space < 0)
273753ac610SCharles Manning printf("not mounted\n");
274753ac610SCharles Manning else
275753ac610SCharles Manning printf("free 0x%x\n", free_space);
276753ac610SCharles Manning
277753ac610SCharles Manning }
278753ac610SCharles Manning }
279753ac610SCharles Manning
make_a_file(char * yaffsName,char bval,int sizeOfFile)280753ac610SCharles Manning void make_a_file(char *yaffsName, char bval, int sizeOfFile)
281753ac610SCharles Manning {
282753ac610SCharles Manning int outh;
283753ac610SCharles Manning int i;
284753ac610SCharles Manning unsigned char buffer[100];
285753ac610SCharles Manning
286753ac610SCharles Manning outh = yaffs_open(yaffsName,
287753ac610SCharles Manning O_CREAT | O_RDWR | O_TRUNC,
288753ac610SCharles Manning S_IREAD | S_IWRITE);
289753ac610SCharles Manning if (outh < 0) {
290753ac610SCharles Manning printf("Error opening file: %d. %s\n", outh, yaffs_error_str());
291753ac610SCharles Manning return;
292753ac610SCharles Manning }
293753ac610SCharles Manning
294753ac610SCharles Manning memset(buffer, bval, 100);
295753ac610SCharles Manning
296753ac610SCharles Manning do {
297753ac610SCharles Manning i = sizeOfFile;
298753ac610SCharles Manning if (i > 100)
299753ac610SCharles Manning i = 100;
300753ac610SCharles Manning sizeOfFile -= i;
301753ac610SCharles Manning
302753ac610SCharles Manning yaffs_write(outh, buffer, i);
303753ac610SCharles Manning
304753ac610SCharles Manning } while (sizeOfFile > 0);
305753ac610SCharles Manning
306753ac610SCharles Manning
307753ac610SCharles Manning yaffs_close(outh);
308753ac610SCharles Manning }
309753ac610SCharles Manning
read_a_file(char * fn)310753ac610SCharles Manning void read_a_file(char *fn)
311753ac610SCharles Manning {
312753ac610SCharles Manning int h;
313753ac610SCharles Manning int i = 0;
314753ac610SCharles Manning unsigned char b;
315753ac610SCharles Manning
316753ac610SCharles Manning h = yaffs_open(fn, O_RDWR, 0);
317753ac610SCharles Manning if (h < 0) {
318753ac610SCharles Manning printf("File not found\n");
319753ac610SCharles Manning return;
320753ac610SCharles Manning }
321753ac610SCharles Manning
322753ac610SCharles Manning while (yaffs_read(h, &b, 1) > 0) {
323753ac610SCharles Manning printf("%02x ", b);
324753ac610SCharles Manning i++;
325753ac610SCharles Manning if (i > 32) {
326753ac610SCharles Manning printf("\n");
32751855e89SMasahiro Yamada i = 0;
328753ac610SCharles Manning }
329753ac610SCharles Manning }
330753ac610SCharles Manning printf("\n");
331753ac610SCharles Manning yaffs_close(h);
332753ac610SCharles Manning }
333753ac610SCharles Manning
cmd_yaffs_mount(char * mp)334753ac610SCharles Manning void cmd_yaffs_mount(char *mp)
335753ac610SCharles Manning {
336753ac610SCharles Manning int retval = yaffs_mount(mp);
337753ac610SCharles Manning if (retval < 0)
338753ac610SCharles Manning printf("Error mounting %s, return value: %d, %s\n", mp,
339753ac610SCharles Manning yaffsfs_GetError(), yaffs_error_str());
340753ac610SCharles Manning }
341753ac610SCharles Manning
342753ac610SCharles Manning
cmd_yaffs_umount(char * mp)343753ac610SCharles Manning void cmd_yaffs_umount(char *mp)
344753ac610SCharles Manning {
345753ac610SCharles Manning if (yaffs_unmount(mp) == -1)
346753ac610SCharles Manning printf("Error umounting %s, return value: %d, %s\n", mp,
347753ac610SCharles Manning yaffsfs_GetError(), yaffs_error_str());
348753ac610SCharles Manning }
349753ac610SCharles Manning
cmd_yaffs_write_file(char * yaffsName,char bval,int sizeOfFile)350753ac610SCharles Manning void cmd_yaffs_write_file(char *yaffsName, char bval, int sizeOfFile)
351753ac610SCharles Manning {
352753ac610SCharles Manning make_a_file(yaffsName, bval, sizeOfFile);
353753ac610SCharles Manning }
354753ac610SCharles Manning
355753ac610SCharles Manning
cmd_yaffs_read_file(char * fn)356753ac610SCharles Manning void cmd_yaffs_read_file(char *fn)
357753ac610SCharles Manning {
358753ac610SCharles Manning read_a_file(fn);
359753ac610SCharles Manning }
360753ac610SCharles Manning
361753ac610SCharles Manning
cmd_yaffs_mread_file(char * fn,char * addr)362753ac610SCharles Manning void cmd_yaffs_mread_file(char *fn, char *addr)
363753ac610SCharles Manning {
364753ac610SCharles Manning int h;
365753ac610SCharles Manning struct yaffs_stat s;
366753ac610SCharles Manning
367753ac610SCharles Manning yaffs_stat(fn, &s);
368753ac610SCharles Manning
369753ac610SCharles Manning printf("Copy %s to 0x%p... ", fn, addr);
370753ac610SCharles Manning h = yaffs_open(fn, O_RDWR, 0);
371753ac610SCharles Manning if (h < 0) {
372753ac610SCharles Manning printf("File not found\n");
373753ac610SCharles Manning return;
374753ac610SCharles Manning }
375753ac610SCharles Manning
376753ac610SCharles Manning yaffs_read(h, addr, (int)s.st_size);
377753ac610SCharles Manning printf("\t[DONE]\n");
378753ac610SCharles Manning
379753ac610SCharles Manning yaffs_close(h);
380753ac610SCharles Manning }
381753ac610SCharles Manning
382753ac610SCharles Manning
cmd_yaffs_mwrite_file(char * fn,char * addr,int size)383753ac610SCharles Manning void cmd_yaffs_mwrite_file(char *fn, char *addr, int size)
384753ac610SCharles Manning {
385753ac610SCharles Manning int outh;
386753ac610SCharles Manning
387753ac610SCharles Manning outh = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
388753ac610SCharles Manning if (outh < 0)
389753ac610SCharles Manning printf("Error opening file: %d, %s\n", outh, yaffs_error_str());
390753ac610SCharles Manning
391753ac610SCharles Manning yaffs_write(outh, addr, size);
392753ac610SCharles Manning
393753ac610SCharles Manning yaffs_close(outh);
394753ac610SCharles Manning }
395753ac610SCharles Manning
396753ac610SCharles Manning
cmd_yaffs_ls(const char * mountpt,int longlist)397753ac610SCharles Manning void cmd_yaffs_ls(const char *mountpt, int longlist)
398753ac610SCharles Manning {
399753ac610SCharles Manning int i;
400753ac610SCharles Manning yaffs_DIR *d;
401753ac610SCharles Manning struct yaffs_dirent *de;
402753ac610SCharles Manning struct yaffs_stat stat;
403753ac610SCharles Manning char tempstr[255];
404753ac610SCharles Manning
405753ac610SCharles Manning d = yaffs_opendir(mountpt);
406753ac610SCharles Manning
407753ac610SCharles Manning if (!d) {
408753ac610SCharles Manning printf("opendir failed, %s\n", yaffs_error_str());
409753ac610SCharles Manning return;
410753ac610SCharles Manning }
411753ac610SCharles Manning
412753ac610SCharles Manning for (i = 0; (de = yaffs_readdir(d)) != NULL; i++) {
413753ac610SCharles Manning if (longlist) {
414753ac610SCharles Manning sprintf(tempstr, "%s/%s", mountpt, de->d_name);
415753ac610SCharles Manning yaffs_lstat(tempstr, &stat);
416753ac610SCharles Manning printf("%-25s\t%7ld",
417753ac610SCharles Manning de->d_name,
418753ac610SCharles Manning (long)stat.st_size);
419753ac610SCharles Manning printf(" %5d %s\n",
420753ac610SCharles Manning stat.st_ino,
421753ac610SCharles Manning yaffs_file_type_str(&stat));
422753ac610SCharles Manning } else {
423753ac610SCharles Manning printf("%s\n", de->d_name);
424753ac610SCharles Manning }
425753ac610SCharles Manning }
426753ac610SCharles Manning
427753ac610SCharles Manning yaffs_closedir(d);
428753ac610SCharles Manning }
429753ac610SCharles Manning
430753ac610SCharles Manning
cmd_yaffs_mkdir(const char * dir)431753ac610SCharles Manning void cmd_yaffs_mkdir(const char *dir)
432753ac610SCharles Manning {
433753ac610SCharles Manning int retval = yaffs_mkdir(dir, 0);
434753ac610SCharles Manning
435753ac610SCharles Manning if (retval < 0)
436753ac610SCharles Manning printf("yaffs_mkdir returning error: %d, %s\n",
437753ac610SCharles Manning retval, yaffs_error_str());
438753ac610SCharles Manning }
439753ac610SCharles Manning
cmd_yaffs_rmdir(const char * dir)440753ac610SCharles Manning void cmd_yaffs_rmdir(const char *dir)
441753ac610SCharles Manning {
442753ac610SCharles Manning int retval = yaffs_rmdir(dir);
443753ac610SCharles Manning
444753ac610SCharles Manning if (retval < 0)
445753ac610SCharles Manning printf("yaffs_rmdir returning error: %d, %s\n",
446753ac610SCharles Manning retval, yaffs_error_str());
447753ac610SCharles Manning }
448753ac610SCharles Manning
cmd_yaffs_rm(const char * path)449753ac610SCharles Manning void cmd_yaffs_rm(const char *path)
450753ac610SCharles Manning {
451753ac610SCharles Manning int retval = yaffs_unlink(path);
452753ac610SCharles Manning
453753ac610SCharles Manning if (retval < 0)
454753ac610SCharles Manning printf("yaffs_unlink returning error: %d, %s\n",
455753ac610SCharles Manning retval, yaffs_error_str());
456753ac610SCharles Manning }
457753ac610SCharles Manning
cmd_yaffs_mv(const char * oldPath,const char * newPath)458753ac610SCharles Manning void cmd_yaffs_mv(const char *oldPath, const char *newPath)
459753ac610SCharles Manning {
460753ac610SCharles Manning int retval = yaffs_rename(newPath, oldPath);
461753ac610SCharles Manning
462753ac610SCharles Manning if (retval < 0)
463753ac610SCharles Manning printf("yaffs_unlink returning error: %d, %s\n",
464753ac610SCharles Manning retval, yaffs_error_str());
465753ac610SCharles Manning }
466