Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Feb 2017 17:36:55 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r314215 - head/sys/compat/linuxkpi/common/include/linux
Message-ID:  <201702241736.v1OHatUB072197@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Fri Feb 24 17:36:55 2017
New Revision: 314215
URL: https://svnweb.freebsd.org/changeset/base/314215

Log:
  Implement more string functions in the LinuxKPI.
  
  MFC after:		1 week
  Sponsored by:		Mellanox Technologies

Modified:
  head/sys/compat/linuxkpi/common/include/linux/string.h

Modified: head/sys/compat/linuxkpi/common/include/linux/string.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/string.h	Fri Feb 24 17:03:14 2017	(r314214)
+++ head/sys/compat/linuxkpi/common/include/linux/string.h	Fri Feb 24 17:36:55 2017	(r314215)
@@ -2,7 +2,7 @@
  * Copyright (c) 2010 Isilon Systems, Inc.
  * Copyright (c) 2010 iX Systems, Inc.
  * Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013-2016 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2017 Mellanox Technologies, Ltd.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,29 +31,111 @@
 #ifndef	_LINUX_STRING_H_
 #define	_LINUX_STRING_H_
 
+#include <sys/ctype.h>
+
 #include <linux/types.h>
 #include <linux/gfp.h>
 #include <linux/slab.h>
+#include <linux/uaccess.h>
+#include <linux/err.h>
 
 #include <sys/libkern.h>
 
 #define	strnicmp(...) strncasecmp(__VA_ARGS__)
 
+static inline int
+match_string(const char *const *table, int n, const char *key)
+{
+	int i;
+
+	for (i = 0; i != n && table[i] != NULL; i++) {
+		if (strcmp(table[i], key) == 0)
+			return (i);
+	}
+	return (-EINVAL);
+}
+
+static inline void *
+memdup_user(const void *ptr, size_t len)
+{
+	void *retval;
+	int error;
+
+	retval = malloc(len, M_KMALLOC, M_WAITOK);
+	error = linux_copyin(ptr, retval, len);
+	if (error != 0) {
+		free(retval, M_KMALLOC);
+		return (ERR_PTR(error));
+	}
+	return (retval);
+}
+
 static inline void *
 kmemdup(const void *src, size_t len, gfp_t gfp)
 {
 	void *dst;
 
 	dst = kmalloc(len, gfp);
-	if (dst)
+	if (dst != NULL)
 		memcpy(dst, src, len);
 	return (dst);
 }
 
+static inline char *
+kstrdup(const char *string, gfp_t gfp)
+{
+	char *retval;
+	size_t len;
+
+	len = strlen(string) + 1;
+	retval = kmalloc(len, gfp);
+	if (retval != NULL)
+		memcpy(retval, string, len);
+	return (retval);
+}
+
+static inline char *
+kstrndup(const char *string, size_t len, gfp_t gfp)
+{
+	char *retval;
+
+	retval = kmalloc(len + 1, gfp);
+	if (retval != NULL)
+		strncpy(retval, string, len);
+	return (retval);
+}
+
 static inline const char *
 kstrdup_const(const char *src, gfp_t gfp)
 {
 	return (kmemdup(src, strlen(src) + 1, gfp));
 }
 
-#endif	/* _LINUX_STRING_H_ */
+static inline char *
+skip_spaces(const char *str)
+{
+	while (isspace(*str))
+		++str;
+	return (__DECONST(char *, str));
+}
+
+static inline void *
+memchr_inv(const void *start, int c, size_t length)
+{
+	const u8 *ptr;
+	const u8 *end;
+	u8 ch;
+
+	ch = c;
+	ptr = start;
+	end = ptr + length;
+
+	while (ptr != end) {
+		if (*ptr != ch)
+			return (__DECONST(void *, ptr));
+		ptr++;
+	}
+	return (NULL);
+}
+
+#endif					/* _LINUX_STRING_H_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201702241736.v1OHatUB072197>