int hxc_statex( const char *filename, struct stat *buf) { #if defined (WIN32) wchar_t wpath[MAX_PATH+1]; if( convertpath(filename, wpath) < 0 ) return -1; return _wstat (wpath,(struct _stat *)buf); #else int res; const char *local_name; local_name = filename;//ToLocale( filename ); if( local_name != NULL ) { res = lstat( local_name, buf ); // LocaleFree( local_name ); return res; } errno = ENOENT; return -1; #endif }
/* * getURL: get URL of the specified file. * * i) file file name * i) htmldir HTML directory * o) URL URL begin with 'file:' */ void getURL(const char *file, const char *htmldir, STRBUF *URL) { char *p; char buf[MAXPATHLEN]; STRBUF *sb = strbuf_open(0); if (!test("f", file) && !test("d", file)) die("file '%s' not found.", file); p = normalize(file, get_root_with_slash(), cwd, buf, sizeof(buf)); if (p != NULL && convertpath(dbpath, htmldir, p, sb) == 0) makefileurl(strbuf_value(sb), linenumber, URL); else makefileurl(realpath(file, buf), 0, URL); strbuf_close(sb); }
int hxc_open (const char *filename, int flags, ...) { #ifdef WIN32 wchar_t wpath[MAX_PATH+1]; #else const char *local_name; #endif unsigned int mode = 0; va_list ap; va_start (ap, flags); if (flags & O_CREAT) mode = va_arg (ap, unsigned int); va_end (ap); #ifdef WIN32 memset(wpath,0,(MAX_PATH+1)*sizeof(wchar_t)); if(convertpath(filename, wpath)<0) return -1; return _wopen (wpath, flags, mode); #else local_name = filename; //local_name = (const char *)ToLocale (filename); if (local_name == NULL) { errno = ENOENT; return -1; } int fd = open (local_name, flags, mode); //LocaleFree (local_name); return fd; #endif }
int hxc_find_first_file(char *folder, char *file, filefoundinfo* fileinfo) { #if defined (WIN32) HANDLE hfindfile; char *folderstr; WIN32_FIND_DATAW FindFileData; wchar_t wpath[MAX_PATH+1]; if(file) { folderstr=(char *) malloc(strlen(folder)+strlen(file)+2); sprintf((char *)folderstr,"%s\\%s",folder,file); } else { folderstr = (char *) malloc(strlen(folder)+1); sprintf((char *)folderstr,"%s",folder); } convertpath (folderstr, wpath); hfindfile = FindFirstFileW(wpath, &FindFileData); if(hfindfile!=INVALID_HANDLE_VALUE) { WideCharToMultiByte(CP_UTF8,0,FindFileData.cFileName,-1,fileinfo->filename,sizeof(fileinfo->filename),NULL,NULL); //sprintf(fileinfo->filename,"%s",FindFileData.cFileName); fileinfo->isdirectory = 0; if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { fileinfo->isdirectory = 1; } fileinfo->size = FindFileData.nFileSizeLow; free(folderstr); return (int)hfindfile; } else { free(folderstr); return -1; } #else struct dirent *d; DIR * dir; struct stat fileStat; char * tmpstr; dir = opendir (folder); if(dir) { d = readdir (dir); if(d) { tmpstr = malloc (strlen(folder) + strlen(d->d_name) + 4 ); if(tmpstr) { strcpy(tmpstr,folder); strcat(tmpstr,"/"); strcat(tmpstr,d->d_name); memset(&fileStat,0,sizeof(struct stat)); if(!lstat (tmpstr, &fileStat)) { if ( S_ISDIR ( fileStat.st_mode ) ) fileinfo->isdirectory=1; else fileinfo->isdirectory=0; fileinfo->size=fileStat.st_size; strncpy(fileinfo->filename,d->d_name,256); free(tmpstr); return (int)dir; } free(tmpstr); } closedir (dir); dir=(DIR *)-1; } closedir (dir); dir=(DIR *)-1; } else { dir=(DIR *)-1; } return (int)dir; #endif return -1; }