/* * 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 #include #include 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; }