diff options
Diffstat (limited to 'wineconfig/drivedetect.py')
-rw-r--r-- | wineconfig/drivedetect.py | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/wineconfig/drivedetect.py b/wineconfig/drivedetect.py new file mode 100644 index 0000000..5916b18 --- /dev/null +++ b/wineconfig/drivedetect.py @@ -0,0 +1,122 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +########################################################################### +# wineread.py - description # +# ------------------------------ # +# begin : Fri Mar 26 2004 # +# copyright : (C) 2006 by Yuriy Kozlov # +# email : yuriy.kozlov@gmail.com # +# # +########################################################################### +# # +# This program is free software; you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation; either version 2 of the License, or # +# (at your option) any later version. # +# # +########################################################################### + +import os +import wineread + +""" Reads a default set of drives from /etc/fstab """ + +fstabpath = "/etc/fstab" + +# Listed in winecfg +ignored_fs_types = set(["devpts", + "tmpfs", + "proc", + "sysfs", + "swap", + "usbdevfs", + "rpc_pipefs", + "binfmt_misc"]) + +# Listed in winecfg +ignored_mnt_pts = set(["/boot"]) + +cd_fs_types = set(["cdfs","udf","iso9660"]) + +# An incomplete listing, I don't know how winecfg does this. +# RAMFS is included here because I don't know what the correct type for it is in wine. +hd_fs_types = set(["ext4","ext3","ext2","ext","fat","fat32","fat16","ntfs","reiserfs","reiser4", + "jfs","xfs","ramfs","vfat","ufs","hfs","hfsplus"]) + +# Listed in winecfg +net_fs_types = set(["nfs","nfs4","smbfs","cifs","coda"]) + +def autodetect(drives=None): + """ Returns a set of drives found by scanning /etc/fstab, and an error code """ + if not drives: + drives = wineread.GetEmptyDrives() + mappings = set() + if not drives[2][2]: + drives[2][2] = "../drive_c" + drives[2][3] = "hd" + + for drive in drives: + mapping = drive[2] + if mapping: + mappings.add(mapping) + + driveid = 3 + fstab=open(fstabpath,'r') + + for driveline in fstab: + if driveline[0] == '#' or len(driveline.strip()) == 0: # Comment or empty line + continue + else: + driveprops = driveline.split() + fs = driveprops[0] + mnt = driveprops[1] + fstypes = set(driveprops[2].split(',')) + + ignore = False + for fstype in fstypes: + if fstype in ignored_fs_types: + ignore = True + break + + if mnt in ignored_mnt_pts or mnt in mappings: + ignore = True + + if not ignore: + while drives[driveid][2]: # Drive is in use, don't overwrite. + driveid += 1 + if driveid > 25: + return (1,drives) + drives[driveid][2] = mnt + if "/dev/fd" in fs or "floppy" in mnt: + drives[driveid][3] = "floppy" + elif fstype in cd_fs_types or "/dev/cdrom" in fs or "cdrom" in mnt: + drives[driveid][3] = "cdrom" + elif fstype in hd_fs_types: + drives[driveid][3] = "hd" + elif fstype in net_fs_types: + drives[driveid][3] = "network" + else: + drives[driveid][3] = "auto" + driveid += 1 + + fstab.close() + return (0,drives) + +def autodetectshelllinks(shelllinks = None): + """ Returns a default set of windows shell folder mappings """ + if not shelllinks: + shelllinks = wineread.GetEmptyShellLinks() + + for link in shelllinks: + if link[2]: + continue + else: + link[3] = "shellfolder" + #link[4] = wineread.winepath + "/dosdevices/c:/windows/profiles/" + os.environ['USER'] + "/" + link[1] + link[4] = wineread.defaultwinfolderspath + "\\" + link[1] + link[5] = wineread.defaultwinfolderspath + "\\" + link[1] + link[2] = os.environ['HOME'] + if link[1] == "Desktop": + link[2] = os.environ['HOME'] + "/Desktop" + + return shelllinks |