1234567891011121314151617181920212223242526272829303132333435363738394041 |
- /*
- * Copyright (C) 2006 Atmark Techno, Inc.
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- */
- #include <linux/string.h>
- #include <asm/uaccess.h>
- #include <asm/bug.h>
- long strnlen_user(const char __user *src, long count)
- {
- return strlen(src) + 1;
- }
- #define __do_strncpy_from_user(dst, src, count, res) \
- do { \
- char *tmp; \
- strncpy(dst, src, count); \
- for (tmp = dst; *tmp && count > 0; tmp++, count--) \
- ; \
- res = (tmp - dst); \
- } while (0)
- long __strncpy_from_user(char *dst, const char __user *src, long count)
- {
- long res;
- __do_strncpy_from_user(dst, src, count, res);
- return res;
- }
- long strncpy_from_user(char *dst, const char __user *src, long count)
- {
- long res = -EFAULT;
- if (access_ok(VERIFY_READ, src, 1))
- __do_strncpy_from_user(dst, src, count, res);
- return res;
- }
|