mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
047092ffe2
misc.c was getting a little large, move two of the UNC parsing relating functions to a new C file unc.c which makes the coding of the upcoming witness protocol patch series a little cleaner as well. Suggested-by: Rafal Szczesniak <rafal@elbingbrewery.org> Reviewed-by: Aurelien Aptel <aaptel@suse.com> Signed-off-by: Steve French <stfrench@microsoft.com>
68 lines
1.4 KiB
C
68 lines
1.4 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Copyright (C) 2020, Microsoft Corporation.
|
|
*
|
|
* Author(s): Steve French <stfrench@microsoft.com>
|
|
* Suresh Jayaraman <sjayaraman@suse.de>
|
|
* Jeff Layton <jlayton@kernel.org>
|
|
*/
|
|
|
|
#include <linux/slab.h>
|
|
#include "cifsproto.h"
|
|
|
|
/* extract the host portion of the UNC string */
|
|
char *extract_hostname(const char *unc)
|
|
{
|
|
const char *src;
|
|
char *dst, *delim;
|
|
unsigned int len;
|
|
|
|
/* skip double chars at beginning of string */
|
|
/* BB: check validity of these bytes? */
|
|
if (strlen(unc) < 3)
|
|
return ERR_PTR(-EINVAL);
|
|
for (src = unc; *src && *src == '\\'; src++)
|
|
;
|
|
if (!*src)
|
|
return ERR_PTR(-EINVAL);
|
|
|
|
/* delimiter between hostname and sharename is always '\\' now */
|
|
delim = strchr(src, '\\');
|
|
if (!delim)
|
|
return ERR_PTR(-EINVAL);
|
|
|
|
len = delim - src;
|
|
dst = kmalloc((len + 1), GFP_KERNEL);
|
|
if (dst == NULL)
|
|
return ERR_PTR(-ENOMEM);
|
|
|
|
memcpy(dst, src, len);
|
|
dst[len] = '\0';
|
|
|
|
return dst;
|
|
}
|
|
|
|
char *extract_sharename(const char *unc)
|
|
{
|
|
const char *src;
|
|
char *delim, *dst;
|
|
int len;
|
|
|
|
/* skip double chars at the beginning */
|
|
src = unc + 2;
|
|
|
|
/* share name is always preceded by '\\' now */
|
|
delim = strchr(src, '\\');
|
|
if (!delim)
|
|
return ERR_PTR(-EINVAL);
|
|
delim++;
|
|
len = strlen(delim);
|
|
|
|
/* caller has to free the memory */
|
|
dst = kstrndup(delim, len, GFP_KERNEL);
|
|
if (!dst)
|
|
return ERR_PTR(-ENOMEM);
|
|
|
|
return dst;
|
|
}
|