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.
123 lines
4.5 KiB
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
|