You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tde-guidance/wineconfig/drivedetect.py

123 lines
4.5 KiB

#!/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