This version uses sed to change strncmp->yaffs_strncmp etc.
This emnables us to keep the core code free of yaffs_strxxx macros.
Signed-off-by: Charles Manning <cdhmanning@gmail.com>
#CFLAGS += -fno-strict-aliasing
CFLAGS += -O0
#CFLAGS += -DVALGRIND_TEST
+#CFLAGS += -DCONFIG_YAFFS_CASE_INSENSITIVE
CFLAGS+= -Wshadow -Werror=pointer-arith -Werror=write-strings
CFLAGS+= -Werror=strict-prototypes -Werror=missing-parameter-type
# yaffs_checkptrwtest.o\
-YAFFSSYMLINKS = yaffs_ecc.c yaffs_ecc.h yaffs_guts.c yaffs_guts.h yaffs_tagscompat.c yaffs_tagscompat.h \
+YAFFS_SOURCES = yaffs_ecc.c yaffs_ecc.h yaffs_guts.c yaffs_guts.h yaffs_tagscompat.c yaffs_tagscompat.h \
yaffs_packedtags1.c yaffs_packedtags1.h yaffs_packedtags2.c yaffs_packedtags2.h \
yaffs_nand.c yaffs_nand.h yaffs_getblockinfo.h \
yaffs_checkptrw.h yaffs_checkptrw.c \
-SYMLINKS = $(YAFFSSYMLINKS) $(YAFFSDIRECTSYMLINKS)
+COPIED_SOURCES = $(YAFFS_SOURCES) $(YAFFSDIRECTSYMLINKS)
DIRECTTESTOBJS = $(COMMONTESTOBJS) dtest.o
gcc -c $(CFLAGS) -o $@ $<
+$(YAFFS_SOURCES):
+ sed ../../$@ \
+ -e "s/strcat/yaffs_strcat/g" \
+ -e "s/strcpy/yaffs_strcpy/g" \
+ -e "s/strncpy/yaffs_strncpy/g" \
+ -e "s/strnlen/yaffs_strnlen/g" \
+ -e "s/strcmp/yaffs_strcmp/g" \
+ -e "s/strncmp/yaffs_strncmp/g" >$@
+
$(YAFFSSYMLINKS):
ln -s ../../$@ $@
ln -s ../$@ $@
-directtest2k: $(SYMLINKS) $(DIRECTTESTOBJS)
+directtest2k: $(COPIED_SOURCES) $(DIRECTTESTOBJS)
gcc -o $@ $(DIRECTTESTOBJS)
-yaffs_test: $(SYMLINKS) $(YAFFSTESTOBJS)
+yaffs_test: $(COPIED_SOURCES) $(YAFFSTESTOBJS)
gcc -o $@ $(YAFFSTESTOBJS)
-boottest: $(SYMLINKS) $(BOOTTESTOBJS)
+boottest: $(COPIED_SOURCES) $(BOOTTESTOBJS)
gcc -o $@ $(BOOTTESTOBJS)
clean:
- rm -f $(TARGETS) $(ALLOBJS) core core $(SYMLINKS)
+ rm -f $(TARGETS) $(ALLOBJS) core core $(COPIED_SOURCES)
h =yaffs_open(hn,O_RDWR,0);
+}
+void case_insensitive_test(const char *mountpt)
+{
+ char fn[100];
+ char fn2[100];
+ char buffer[100];
+ int ret;
+ struct yaffs_stat s;
+ int h;
+ char *x;
+
+ yaffs_trace_mask = 0;
+
+ yaffs_start_up();
+
+ yaffs_mount(mountpt);
+ dump_directory_tree(mountpt);
+
+ sprintf(fn,"%s/Abc.Txt",mountpt);
+ yaffs_unlink(fn);
+ h = yaffs_open(fn, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
+
+ ret = yaffs_write(h,fn, strlen(fn) + 1);
+
+ ret = yaffs_close(h);
+
+ dump_directory_tree(mountpt);
+
+
+ strcpy(fn2, fn);
+ x = fn2;
+ while(*x) {
+ *x = toupper(*x);
+ x++;
+ }
+
+ h = yaffs_open(fn2, O_RDONLY, 0);
+ ret = yaffs_read(h, buffer, 100);
+
+ if (ret != strlen(fn) + 1 || memcmp(buffer, fn, ret)){
+ printf("wrong file read\n");
+ } else {
+ printf("File %s is the same as file %s\n", fn, fn2);
+ }
+
+ ret = yaffs_stat(fn2, &s);
+
+ printf("renaming\n");
+
+ ret = yaffs_rename(fn, fn2);
+ dump_directory_tree(mountpt);
+
}
void start_twice(const char *mountpt)
//large_file_test("/yaffs2");
//basic_utime_test("/yaffs2");
+ //case_insensitive_test("/yaffs2");
return 0;
ALLOBJS = $(sort $(YAFFSTESTOBJS))
-YAFFSSYMLINKS = yaffs_ecc.c yaffs_ecc.h yaffs_guts.c yaffs_guts.h yaffs_tagscompat.c yaffs_tagscompat.h \
+YAFFSSOURCEFILES = yaffs_ecc.c yaffs_ecc.h yaffs_guts.c yaffs_guts.h yaffs_tagscompat.c yaffs_tagscompat.h \
yaffs_packedtags1.c yaffs_packedtags1.h yaffs_packedtags2.c yaffs_packedtags2.h \
yaffs_nand.c yaffs_nand.h yaffs_getblockinfo.h \
yaffs_checkptrw.h yaffs_checkptrw.c \
yaffs_ramdisk.c yaffs_ramdisk.h yaffs_ramem2k.c \
ynorsim.h ynorsim.c yaffs_osglue.c
-SYMLINKS = $(YAFFSSYMLINKS) $(YAFFSDIRECTSYMLINKS) $(DIRECTEXTRASYMLINKS)
+COPIED_SOURCES = $(YAFFSSOURCEFILES) $(YAFFSDIRECTSYMLINKS) $(DIRECTEXTRASYMLINKS)
#all: directtest2k boottest
all: yaffs_test fuzzer
gcc -c $(CFLAGS) -o $@ $<
-$(YAFFSSYMLINKS):
- ln -s ../../$@ $@
+$(YAFFSSOURCEFILES):
+ sed ../../$@ \
+ -e "s/strcat/yaffs_strcat/g" \
+ -e "s/strcpy/yaffs_strcpy/g" \
+ -e "s/strncpy/yaffs_strncpy/g" \
+ -e "s/strnlen/yaffs_strnlen/g" \
+ -e "s/strcmp/yaffs_strcmp/g" \
+ -e "s/strncmp/yaffs_strncmp/g" >$@
$(YAFFSDIRECTSYMLINKS):
ln -s ../$@ $@
ln -s ../basic-test/$@ $@
-yaffs_test: $(SYMLINKS) $(YAFFSTESTOBJS)
+yaffs_test: $(COPIED_SOURCES) $(YAFFSTESTOBJS)
gcc $(CFLLAG) -o $@ $(YAFFSTESTOBJS)
fuzzer: fuzzer.c
clean:
- rm -f yaffs_test fuzzer fuzzer.o $(ALLOBJS) core $(SYMLINKS)
+ rm -f yaffs_test fuzzer fuzzer.o $(ALLOBJS) core $(COPIED_SOURCES)
alias = obj->variant.symlink_variant.alias;
if(!alias)
return 0;
- return strnlen(alias,YAFFS_MAX_ALIAS_LENGTH);
+ return yaffs_strnlen(alias,YAFFS_MAX_ALIAS_LENGTH);
default:
return 0;
}
/*
* Stuff to handle names.
*/
-
+#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
+
+static int yaffs_toupper(YCHAR a)
+{
+ if(a >= 'a' && a <= 'z')
+ return (a - 'a') + 'A';
+ else
+ return a;
+}
+int yaffsfs_Match(YCHAR a, YCHAR b)
+{
+ return (yaffs_toupper(a) == yaffs_toupper(b));
+}
+#else
int yaffsfs_Match(YCHAR a, YCHAR b)
{
/* case sensitive */
return (a == b);
}
+#endif
int yaffsfs_IsPathDivider(YCHAR ch)
{
{
int retVal = 0;
- int nameLength = strnlen(name,YAFFS_MAX_NAME_LENGTH+1);
+ int nameLength = yaffs_strnlen(name,YAFFS_MAX_NAME_LENGTH+1);
if(nameLength == 0){
yaffsfs_SetError(-ENOENT);
* We will use 3 * max name length instead.
*/
*ret_path = NULL;
- path_length = strnlen(path,(YAFFS_MAX_NAME_LENGTH+1)*3 +1);
+ path_length = yaffs_strnlen(path,(YAFFS_MAX_NAME_LENGTH+1)*3 +1);
/* If the last character is a path divider, then we need to
* trim it back so that the name look-up works properly.
alt_path = kmalloc(path_length + 1, 0);
if(!alt_path)
return -1;
- strcpy(alt_path, path);
+ yaffs_strcpy(alt_path, path);
for(i = path_length-1;
i >= 0 && yaffsfs_IsPathDivider(alt_path[i]);
i--)
/* got to the end of the string */
return dir;
else{
- if(strcmp(str,_Y(".")) == 0){
+ if(yaffs_strcmp(str,_Y(".")) == 0){
/* Do nothing */
- } else if(strcmp(str,_Y("..")) == 0) {
+ } else if(yaffs_strcmp(str,_Y("..")) == 0) {
dir = dir->parent;
} else{
dir = yaffs_find_by_name(dir,str);
yaffsfs_SetError(-ELOOP);
else if(!dir)
yaffsfs_SetError(-ENOENT);
- else if(strncmp(name,_Y("."),2) == 0)
+ else if(yaffs_strncmp(name,_Y("."),2) == 0)
yaffsfs_SetError(-EINVAL);
else if(!obj)
yaffsfs_SetError(-ENOENT);
} else if(oldLoop || newLoop) {
yaffsfs_SetError(-ELOOP);
rename_allowed = 0;
- } else if (olddir && oldname && strncmp(oldname, _Y("."),2) == 0){
+ } else if (olddir && oldname && yaffs_strncmp(oldname, _Y("."),2) == 0){
yaffsfs_SetError(-EINVAL);
rename_allowed = 0;
}else if(!olddir || !newdir || !obj) {
yaffsfs_SetError(-ENOENT);
else if(yaffsfs_TooManyObjects(parent->my_dev))
yaffsfs_SetError(-ENFILE);
- else if(strnlen(name,5) == 0){
+ else if(yaffs_strnlen(name,5) == 0){
/* Trying to make the root itself */
yaffsfs_SetError(-EEXIST);
} else if(parent->my_dev->read_only)
memset(dsc,0,sizeof(yaffsfs_DirectorySearchContext));
dsc->magic = YAFFS_MAGIC;
dsc->dirObj = obj;
- strncpy(dsc->name,dirname,NAME_MAX);
+ yaffs_strncpy(dsc->name,dirname,NAME_MAX);
INIT_LIST_HEAD(&dsc->others);
if(!search_contexts.next)
dsc->de.d_dont_use = (unsigned)dsc->nextReturn;
dsc->de.d_off = dsc->offset++;
yaffs_get_obj_name(dsc->nextReturn,dsc->de.d_name,NAME_MAX);
- if(strnlen(dsc->de.d_name,NAME_MAX+1) == 0)
+ if(yaffs_strnlen(dsc->de.d_name,NAME_MAX+1) == 0)
{
/* this should not happen! */
- strcpy(dsc->de.d_name,_Y("zz"));
+ yaffs_strcpy(dsc->de.d_name,_Y("zz"));
}
dsc->de.d_reclen = sizeof(struct yaffs_dirent);
retVal = &dsc->de;
yaffsfs_SetError(-ENOTDIR);
else if(loop)
yaffsfs_SetError(-ELOOP);
- else if( !parent || strnlen(name,5) < 1)
+ else if( !parent || yaffs_strnlen(name,5) < 1)
yaffsfs_SetError(-ENOENT);
else if(yaffsfs_TooManyObjects(parent->my_dev))
yaffsfs_SetError(-ENFILE);
else {
YCHAR *alias = obj->variant.symlink_variant.alias;
memset(buf,0,bufsiz);
- strncpy(buf,alias,bufsiz - 1);
+ yaffs_strncpy(buf,alias,bufsiz - 1);
retVal = 0;
}
yaffsfs_Unlock();
#define YUCHAR unsigned char
#define _Y(x) x
+#define yaffs_strcat(a,b) strcat(a,b)
+#define yaffs_strcpy(a,b) strcpy(a,b)
+#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
+#define yaffs_strnlen(s,m) strnlen(s,m)
+#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
+#define yaffs_strcmp(a,b) strcasecmp(a,b)
+#define yaffs_strncmp(a,b,c) strncasecmp(a,b,c)
+#else
+#define yaffs_strcmp(a,b) strcmp(a,b)
+#define yaffs_strncmp(a,b,c) strncmp(a,b,c)
+#endif
+
#define hweight8(x) yaffs_hweight8(x)
#define hweight32(x) yaffs_hweight32(x)