brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · f6fc5e3 Raw
70 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 *   Copyright (C) 2020, Microsoft Corporation.4 *5 *   Author(s): Steve French <stfrench@microsoft.com>6 *              Suresh Jayaraman <sjayaraman@suse.de>7 *              Jeff Layton <jlayton@kernel.org>8 */9 10#include <linux/fs.h>11#include <linux/slab.h>12#include <linux/inet.h>13#include <linux/ctype.h>14#include "cifsglob.h"15#include "cifsproto.h"16 17/* extract the host portion of the UNC string */18char *extract_hostname(const char *unc)19{20	const char *src;21	char *dst, *delim;22	unsigned int len;23 24	/* skip double chars at beginning of string */25	/* BB: check validity of these bytes? */26	if (strlen(unc) < 3)27		return ERR_PTR(-EINVAL);28	for (src = unc; *src && *src == '\\'; src++)29		;30	if (!*src)31		return ERR_PTR(-EINVAL);32 33	/* delimiter between hostname and sharename is always '\\' now */34	delim = strchr(src, '\\');35	if (!delim)36		return ERR_PTR(-EINVAL);37 38	len = delim - src;39	dst = kmalloc((len + 1), GFP_KERNEL);40	if (dst == NULL)41		return ERR_PTR(-ENOMEM);42 43	memcpy(dst, src, len);44	dst[len] = '\0';45 46	return dst;47}48 49char *extract_sharename(const char *unc)50{51	const char *src;52	char *delim, *dst;53 54	/* skip double chars at the beginning */55	src = unc + 2;56 57	/* share name is always preceded by '\\' now */58	delim = strchr(src, '\\');59	if (!delim)60		return ERR_PTR(-EINVAL);61	delim++;62 63	/* caller has to free the memory */64	dst = kstrdup(delim, GFP_KERNEL);65	if (!dst)66		return ERR_PTR(-ENOMEM);67 68	return dst;69}70