mirror of
https://github.com/microsoft/WSL.git
synced 2025-07-03 07:23:20 +00:00

Many Microsoft employees have contributed to the Windows Subsystem for Linux, this commit is the result of their work since 2016. The entire history of the Windows Subsystem for Linux can't be shared here, but here's an overview of WSL's history after it moved to it own repository in 2021: Number of commits on the main branch: 2930 Number of contributors: 31 Head over https://github.com/microsoft/WSL/releases for a more detailed history of the features added to WSL since 2021.
152 lines
No EOL
3.5 KiB
C
152 lines
No EOL
3.5 KiB
C
/*++
|
|
|
|
Copyright (c) Microsoft. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
fstab.c
|
|
|
|
Abstract:
|
|
|
|
This file contains tests for fstab mounting.
|
|
|
|
--*/
|
|
|
|
#include "lxtcommon.h"
|
|
#include "unittests.h"
|
|
#include <libmount/libmount.h>
|
|
|
|
#define LXT_NAME "fstab"
|
|
|
|
LXT_VARIATION_HANDLER FsTabTestMount;
|
|
|
|
static const LXT_VARIATION g_LxtVariations[] = {{"FsTab - DrvFs mounted through fstab", FsTabTestMount}};
|
|
|
|
int FstabTestEntry(int Argc, char* Argv[])
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine main entry point for the wslpath tests.
|
|
|
|
Arguments:
|
|
|
|
Argc - Supplies the number of command line arguments.
|
|
|
|
Argv - Supplies the command line arguments.
|
|
|
|
Return Value:
|
|
|
|
Returns 0 on success, -1 on failure.
|
|
|
|
--*/
|
|
|
|
{
|
|
|
|
LXT_ARGS Args;
|
|
int Result;
|
|
|
|
LxtCheckResult(LxtInitialize(Argc, Argv, &Args, LXT_NAME));
|
|
LxtCheckResult(LxtRunVariations(&Args, g_LxtVariations, LXT_COUNT_OF(g_LxtVariations)));
|
|
|
|
ErrorExit:
|
|
LxtUninitialize();
|
|
return !LXT_SUCCESS(Result);
|
|
}
|
|
|
|
int FsTabTestMount(PLXT_ARGS Args)
|
|
|
|
/*++
|
|
|
|
Description:
|
|
|
|
This routine tests whether fstab mounting was performed correctly.
|
|
|
|
N.B. This test should be run after changing the /etc/fstab file and
|
|
restarting the instance.
|
|
|
|
Arguments:
|
|
|
|
Args - Supplies the command line arguments.
|
|
|
|
Return Value:
|
|
|
|
Returns 0 on success, -1 on failure.
|
|
|
|
--*/
|
|
|
|
{
|
|
|
|
struct libmnt_fs* FileSystem;
|
|
bool Found;
|
|
const char* FsType;
|
|
struct libmnt_iter* Iterator;
|
|
const char* Options;
|
|
int Result;
|
|
const char* Source;
|
|
struct libmnt_table* Table;
|
|
|
|
Iterator = NULL;
|
|
Table = mnt_new_table_from_file("/proc/self/mountinfo");
|
|
LxtCheckNotEqual(Table, NULL, "%p");
|
|
Iterator = mnt_new_iter(MNT_ITER_FORWARD);
|
|
LxtCheckNotEqual(Iterator, NULL, "%p");
|
|
Found = false;
|
|
while (mnt_table_next_fs(Table, Iterator, &FileSystem) == 0)
|
|
{
|
|
FsType = mnt_fs_get_fstype(FileSystem);
|
|
Options = mnt_fs_get_fs_options(FileSystem);
|
|
|
|
//
|
|
// Check that there is only one mount for C: (or any variation therefore, like C:\ or c:),
|
|
// and that that mount uses the exact options specified in fstab.
|
|
//
|
|
|
|
if (strcmp(FsType, "9p") == 0)
|
|
{
|
|
if (strcasestr(Options, "aname=drvfs;path=C:") != NULL)
|
|
{
|
|
LxtCheckTrue(!Found);
|
|
LxtCheckNotEqual(strstr(Options, "aname=drvfs;path=C:\\;metadata;"), NULL, "%p");
|
|
Found = true;
|
|
}
|
|
}
|
|
else if (strcmp(FsType, "drvfs") == 0)
|
|
{
|
|
Source = mnt_fs_get_source(FileSystem);
|
|
if (strcasestr(Source, "C:") == Source)
|
|
{
|
|
LxtCheckTrue(!Found);
|
|
LxtCheckStringEqual(Source, "C:\\");
|
|
LxtCheckStringEqual(Options, "rw,metadata,case=off");
|
|
Found = true;
|
|
}
|
|
}
|
|
else if (strcmp(FsType, "virtiofs") == 0)
|
|
{
|
|
Source = mnt_fs_get_source(FileSystem);
|
|
if (strcasestr(Source, "drvfsaC") == Source)
|
|
{
|
|
LxtCheckTrue(!Found);
|
|
LxtCheckStringEqual(Options, "rw");
|
|
Found = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
LxtCheckTrue(Found);
|
|
|
|
ErrorExit:
|
|
if (Iterator != NULL)
|
|
{
|
|
mnt_free_iter(Iterator);
|
|
}
|
|
|
|
if (Table != NULL)
|
|
{
|
|
mnt_free_table(Table);
|
|
}
|
|
|
|
return Result;
|
|
} |