/* * DOS-FS * NOV 1993 Erik Bos * * FindFile by Bob, hacked for dos & unixpaths by Erik. * * Bugfix by dash@ifi.uio.no: ToUnix() was called to often */ #include #include #include #include #include #include #include #include #include #include #if defined(__linux__) || defined(sun) #include #endif #if defined(__NetBSD__) || defined(__FreeBSD__) #include #include #include #endif #ifdef __svr4__ #include #endif #include "wine.h" #include "windows.h" #include "msdos.h" #include "dos_fs.h" #include "comm.h" #include "task.h" #include "stddebug.h" #include "debug.h" #include "xmalloc.h" #define WINE_INI_USER "~/.winerc" static void ExpandTildeString(char *s) { struct passwd *entry; char temp[1024], *ptr = temp; strcpy(temp, s); while (*ptr) { if (*ptr != '~') { *s++ = *ptr++; continue; } ptr++; if ( (entry = getpwuid(getuid())) == NULL) { continue; } strcpy(s, entry->pw_dir); s += strlen(entry->pw_dir); } *s = 0; } int DOS_GetFreeSpace(int drive, long *size, long *available) { struct statfs info; const char *root; if (!DRIVE_IsValid(drive)) return 0; root = DRIVE_GetRoot(drive); #ifdef __svr4__ if (statfs( root, &info, 0, 0) < 0) { #else if (statfs( root, &info) < 0) { #endif fprintf(stderr,"dosfs: cannot do statfs(%s)\n", root ); return 0; } *size = info.f_bsize * info.f_blocks; #ifdef __svr4__ *available = info.f_bfree * info.f_bsize; #else *available = info.f_bavail * info.f_bsize; #endif return 1; } /********************************************************************** * WineIniFileName */ char *WineIniFileName(void) { int fd; static char *filename = NULL; static char name[256]; if (filename) return filename; strcpy(name, WINE_INI_USER); ExpandTildeString(name); if ((fd = open(name, O_RDONLY)) != -1) { close(fd); filename = name; return filename; } if ((fd = open(WINE_INI_GLOBAL, O_RDONLY)) != -1) { close(fd); filename = WINE_INI_GLOBAL; return filename; } fprintf(stderr,"wine: can't open configuration file %s or %s !\n", WINE_INI_GLOBAL, WINE_INI_USER); exit(1); }