Skip to content

Commit

Permalink
cifs: cleanup misc.c
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Aurelien Aptel <[email protected]>
Signed-off-by: Steve French <[email protected]>
  • Loading branch information
Steve French committed Dec 14, 2020
1 parent bc04499 commit 047092f
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 57 deletions.
2 changes: 1 addition & 1 deletion fs/cifs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ obj-$(CONFIG_CIFS) += cifs.o
cifs-y := trace.o cifsfs.o cifssmb.o cifs_debug.o connect.o dir.o file.o \
inode.o link.o misc.o netmisc.o smbencrypt.o transport.o asn1.o \
cifs_unicode.o nterr.o cifsencrypt.o \
readdir.o ioctl.o sess.o export.o smb1ops.o winucase.o \
readdir.o ioctl.o sess.o export.o smb1ops.o unc.o winucase.o \
smb2ops.o smb2maperror.o smb2transport.o \
smb2misc.o smb2pdu.o smb2inode.o smb2file.o cifsacl.o fs_context.o

Expand Down
56 changes: 0 additions & 56 deletions fs/cifs/misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1195,59 +1195,3 @@ int update_super_prepath(struct cifs_tcon *tcon, char *prefix)
cifs_put_tcon_super(sb);
return rc;
}

/* 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;
}
67 changes: 67 additions & 0 deletions fs/cifs/unc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
// 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/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;
}

0 comments on commit 047092f

Please sign in to comment.