KMountPoint::List KMountPoint::currentMountPoints(int infoNeeded) { KMountPoint::List result; #ifdef HAVE_GETMNTINFO #ifdef GETMNTINFO_USES_STATVFS struct statvfs *mounted; #else struct statfs *mounted; #endif int num_fs = getmntinfo(&mounted, MNT_NOWAIT); for (int i=0;i<num_fs;i++) { KMountPoint *mp = new KMountPoint(); mp->m_mountedFrom = TQFile::decodeName(mounted[i].f_mntfromname); mp->m_mountPoint = TQFile::decodeName(mounted[i].f_mntonname); #ifdef __osf__ mp->m_mountType = TQFile::decodeName(mnt_names[mounted[i].f_type]); #else mp->m_mountType = TQFile::decodeName(mounted[i].f_fstypename); #endif if (infoNeeded & NeedMountOptions) { struct fstab *ft = getfsfile(mounted[i].f_mntonname); TQString options = TQFile::decodeName(ft->fs_mntops); mp->m_mountOptions = TQStringList::split(',', options); } if (infoNeeded & NeedRealDeviceName) { if (mp->m_mountedFrom.startsWith("/")) mp->m_device = TDEStandardDirs::realPath(mp->m_mountedFrom); } // TODO: Strip trailing '/' ? result.append(mp); } #elif defined(_AIX) struct vmount *mntctl_buffer; struct vmount *vm; char *mountedfrom; char *mountedto; int fsname_len, num; int buf_sz = 4096; mntctl_buffer = (struct vmount*)malloc(buf_sz); num = mntctl(MCTL_QUERY, buf_sz, mntctl_buffer); if (num == 0) { buf_sz = *(int*)mntctl_buffer; free(mntctl_buffer); mntctl_buffer = (struct vmount*)malloc(buf_sz); num = mntctl(MCTL_QUERY, buf_sz, mntctl_buffer); } if (num > 0) { /* iterate through items in the vmount structure: */ vm = (struct vmount *)mntctl_buffer; for ( ; num > 0; num-- ) { /* get the name of the mounted file systems: */ fsname_len = vmt2datasize(vm, VMT_STUB); mountedto = (char*)malloc(fsname_len + 1); mountedto[fsname_len] = '\0'; strncpy(mountedto, (char *)vmt2dataptr(vm, VMT_STUB), fsname_len); fsname_len = vmt2datasize(vm, VMT_OBJECT); mountedfrom = (char*)malloc(fsname_len + 1); mountedfrom[fsname_len] = '\0'; strncpy(mountedfrom, (char *)vmt2dataptr(vm, VMT_OBJECT), fsname_len); /* Look up the string for the file system type, * as listed in /etc/vfs. * ex.: nfs,jfs,afs,cdrfs,sfs,cachefs,nfs3,autofs */ struct vfs_ent* ent = getvfsbytype(vm->vmt_gfstype); KMountPoint *mp = new KMountPoint(); mp->m_mountedFrom = TQFile::decodeName(mountedfrom); mp->m_mountPoint = TQFile::decodeName(mountedto); mp->m_mountType = TQFile::decodeName(ent->vfsent_name); free(mountedfrom); free(mountedto); if (infoNeeded & NeedMountOptions) { // TODO } if (infoNeeded & NeedRealDeviceName) { if (mp->m_mountedFrom.startsWith("/")) mp->m_device = TDEStandardDirs::realPath(mp->m_mountedFrom); } result.append(mp); /* goto the next vmount structure: */ vm = (struct vmount *)((char *)vm + vm->vmt_length); } endvfsent( ); } free( mntctl_buffer ); #elif defined(Q_WS_WIN) //TODO? #else STRUCT_SETMNTENT mnttab; if ((mnttab = SETMNTENT(MNTTAB, "r")) == 0) return result; STRUCT_MNTENT fe; while (GETMNTENT(mnttab, fe)) { KMountPoint *mp = new KMountPoint(); mp->m_mountedFrom = TQFile::decodeName(FSNAME(fe)); mp->m_mountPoint = TQFile::decodeName(MOUNTPOINT(fe)); mp->m_mountType = TQFile::decodeName(MOUNTTYPE(fe)); //Devices using supermount have their device names in the mount options //instead of the device field. That's why we need to read the mount options if (infoNeeded & NeedMountOptions || (mp->m_mountType == "supermount")) { TQString options = TQFile::decodeName(MOUNTOPTIONS(fe)); mp->m_mountOptions = TQStringList::split(',', options); } if (mp->m_mountType == "supermount") mp->m_mountedFrom = devNameFromOptions(mp->m_mountOptions); if (infoNeeded & NeedRealDeviceName) { if (mp->m_mountedFrom.startsWith("/")) mp->m_device = TDEStandardDirs::realPath(mp->m_mountedFrom); } // TODO: Strip trailing '/' ? result.append(mp); } ENDMNTENT(mnttab); #endif return result; }
KMountPoint::List KMountPoint::possibleMountPoints(int infoNeeded) { KMountPoint::List result; #ifdef HAVE_SETMNTENT STRUCT_SETMNTENT fstab; if ((fstab = SETMNTENT(FSTAB, "r")) == 0) return result; STRUCT_MNTENT fe; while (GETMNTENT(fstab, fe)) { KMountPoint *mp = new KMountPoint(); mp->m_mountedFrom = TQFile::decodeName(FSNAME(fe)); mp->m_mountPoint = TQFile::decodeName(MOUNTPOINT(fe)); mp->m_mountType = TQFile::decodeName(MOUNTTYPE(fe)); //Devices using supermount have their device names in the mount options //instead of the device field. That's why we need to read the mount options if (infoNeeded & NeedMountOptions || (mp->m_mountType == "supermount")) { TQString options = TQFile::decodeName(MOUNTOPTIONS(fe)); mp->m_mountOptions = TQStringList::split(',', options); } if(mp->m_mountType == "supermount") mp->m_mountedFrom = devNameFromOptions(mp->m_mountOptions); if (infoNeeded & NeedRealDeviceName) { if (mp->m_mountedFrom.startsWith("/")) mp->m_device = TDEStandardDirs::realPath(mp->m_mountedFrom); } // TODO: Strip trailing '/' ? result.append(mp); } ENDMNTENT(fstab); #else TQFile f(FSTAB); if ( !f.open(IO_ReadOnly) ) return result; TQTextStream t (&f); TQString s; while (! t.eof()) { s=t.readLine().simplifyWhiteSpace(); if ( s.isEmpty() || (s[0] == '#')) continue; // not empty or commented out by '#' TQStringList item = TQStringList::split(' ', s); #ifdef _OS_SOLARIS_ if (item.count() < 5) continue; #else if (item.count() < 4) continue; #endif KMountPoint *mp = new KMountPoint(); int i = 0; mp->m_mountedFrom = item[i++]; #ifdef _OS_SOLARIS_ //device to fsck i++; #endif mp->m_mountPoint = item[i++]; mp->m_mountType = item[i++]; TQString options = item[i++]; if (infoNeeded & NeedMountOptions) { mp->m_mountOptions = TQStringList::split(',', options); } if (infoNeeded & NeedRealDeviceName) { if (mp->m_mountedFrom.startsWith("/")) mp->m_device = TDEStandardDirs::realPath(mp->m_mountedFrom); } // TODO: Strip trailing '/' ? result.append(mp); } //while f.close(); #endif return result; }