123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // SPDX-License-Identifier: GPL-2.0-or-later
- /*
- * Copyright (C) 2020, Microsoft Corporation.
- *
- * Author(s): Steve French <[email protected]>
- * Suresh Jayaraman <[email protected]>
- * Jeff Layton <[email protected]>
- */
- #include <linux/fs.h>
- #include <linux/slab.h>
- #include <linux/inet.h>
- #include <linux/ctype.h>
- #include "cifsglob.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;
- /* 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++;
- /* caller has to free the memory */
- dst = kstrdup(delim, GFP_KERNEL);
- if (!dst)
- return ERR_PTR(-ENOMEM);
- return dst;
- }
|