diff options
author | msvensson@neptunus.(none) <> | 2006-04-12 09:09:22 +0200 |
---|---|---|
committer | msvensson@neptunus.(none) <> | 2006-04-12 09:09:22 +0200 |
commit | 7c7015909768efdb93e3dfa7e9f4392ad9bd6e2f (patch) | |
tree | 2bd554571e30b03f6d7c0b9cff77610e913e6db3 | |
parent | a1e78b3d3666446c2749f706e5a65308a8182d38 (diff) | |
parent | a4b19285e5e932acca1348b3fb013fd022e3dbe6 (diff) | |
download | mariadb-git-7c7015909768efdb93e3dfa7e9f4392ad9bd6e2f.tar.gz |
Merge bk-internal:/home/bk/mysql-5.0
into neptunus.(none):/home/msvensson/mysql/mysql-5.0
-rw-r--r-- | mysys/my_lib.c | 97 |
1 files changed, 50 insertions, 47 deletions
diff --git a/mysys/my_lib.c b/mysys/my_lib.c index 522fa56cbf1..03f2d91916d 100644 --- a/mysys/my_lib.c +++ b/mysys/my_lib.c @@ -384,11 +384,10 @@ MY_DIR *my_dir(const char *path, myf MyFlags) DBUG_PRINT("my",("path: '%s' stat: %d MyFlags: %d",path,MyFlags)); /* Put LIB-CHAR as last path-character if not there */ - tmp_file=tmp_path; if (!*path) *tmp_file++ ='.'; /* From current dir */ - tmp_file= strmov(tmp_file,path); + tmp_file= strnmov(tmp_file, path, FN_REFLEN-5); if (tmp_file[-1] == FN_DEVCHAR) *tmp_file++= '.'; /* From current dev-dir */ if (tmp_file[-1] != FN_LIBCHAR) @@ -424,7 +423,7 @@ MY_DIR *my_dir(const char *path, myf MyFlags) if ((handle=_findfirst(tmp_path,&find)) == -1L) #endif { - DBUG_PRINT("info", ("find_first returned error")); + DBUG_PRINT("info", ("findfirst returned error, errno: %d", errno)); if (errno != EINVAL) goto error; /* @@ -433,72 +432,76 @@ MY_DIR *my_dir(const char *path, myf MyFlags) continue and return zero files in dir */ } - - do + else { + + do + { #ifdef __BORLANDC__ - attrib= find.ff_attrib; + attrib= find.ff_attrib; #else - attrib= find.attrib; - /* - Do not show hidden and system files which Windows sometimes create. - Note. Because Borland's findfirst() is called with the third - argument = 0 hidden/system files are excluded from the search. - */ - if (attrib & (_A_HIDDEN | _A_SYSTEM)) - continue; -#endif + attrib= find.attrib; + /* + Do not show hidden and system files which Windows sometimes create. + Note. Because Borland's findfirst() is called with the third + argument = 0 hidden/system files are excluded from the search. + */ + if (attrib & (_A_HIDDEN | _A_SYSTEM)) + continue; +#endif #ifdef __BORLANDC__ - if (!(finfo.name= strdup_root(names_storage, find.ff_name))) - goto error; + if (!(finfo.name= strdup_root(names_storage, find.ff_name))) + goto error; #else - if (!(finfo.name= strdup_root(names_storage, find.name))) - goto error; -#endif - if (MyFlags & MY_WANT_STAT) - { - if (!(finfo.mystat= (MY_STAT*)alloc_root(names_storage, - sizeof(MY_STAT)))) + if (!(finfo.name= strdup_root(names_storage, find.name))) goto error; - - bzero(finfo.mystat, sizeof(MY_STAT)); +#endif + if (MyFlags & MY_WANT_STAT) + { + if (!(finfo.mystat= (MY_STAT*)alloc_root(names_storage, + sizeof(MY_STAT)))) + goto error; + + bzero(finfo.mystat, sizeof(MY_STAT)); #ifdef __BORLANDC__ - finfo.mystat->st_size=find.ff_fsize; + finfo.mystat->st_size=find.ff_fsize; #else - finfo.mystat->st_size=find.size; + finfo.mystat->st_size=find.size; #endif - mode=MY_S_IREAD; - if (!(attrib & _A_RDONLY)) - mode|=MY_S_IWRITE; - if (attrib & _A_SUBDIR) - mode|=MY_S_IFDIR; - finfo.mystat->st_mode=mode; + mode= MY_S_IREAD; + if (!(attrib & _A_RDONLY)) + mode|= MY_S_IWRITE; + if (attrib & _A_SUBDIR) + mode|= MY_S_IFDIR; + finfo.mystat->st_mode= mode; #ifdef __BORLANDC__ - finfo.mystat->st_mtime=((uint32) find.ff_ftime); + finfo.mystat->st_mtime= ((uint32) find.ff_ftime); #else - finfo.mystat->st_mtime=((uint32) find.time_write); + finfo.mystat->st_mtime= ((uint32) find.time_write); #endif - } - else - finfo.mystat= NULL; + } + else + finfo.mystat= NULL; - if (push_dynamic(dir_entries_storage, (gptr)&finfo)) - goto error; - + if (push_dynamic(dir_entries_storage, (gptr)&finfo)) + goto error; + } #ifdef __BORLANDC__ - } while (findnext(&find) == 0); + while (findnext(&find) == 0); #else - } while (_findnext(handle,&find) == 0); - - _findclose(handle); + while (_findnext(handle,&find) == 0); + + _findclose(handle); #endif + } result->dir_entry= (FILEINFO *)dir_entries_storage->buffer; result->number_off_files= dir_entries_storage->elements; - + if (!(MyFlags & MY_DONT_SORT)) qsort((void *) result->dir_entry, result->number_off_files, sizeof(FILEINFO), (qsort_cmp) comp_names); + DBUG_PRINT(exit, ("found %d files", result->number_off_files)); DBUG_RETURN(result); error: my_errno=errno; |