Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
checksum_copy.c
Go to the documentation of this file.
1 /*
2  * arch/score/lib/csum_partial_copy.c
3  *
4  * Score Processor version.
5  *
6  * Copyright (C) 2009 Sunplus Core Technology Co., Ltd.
7  * Lennox Wu <[email protected]>
8  * Chen Liqin <[email protected]>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, see the file COPYING, or write
22  * to the Free Software Foundation, Inc.,
23  * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24  */
25 
26 #include <net/checksum.h>
27 
28 #include <asm/uaccess.h>
29 
30 unsigned int csum_partial_copy(const char *src, char *dst,
31  int len, unsigned int sum)
32 {
33  sum = csum_partial(src, len, sum);
34  memcpy(dst, src, len);
35 
36  return sum;
37 }
38 
39 unsigned int csum_partial_copy_from_user(const char *src, char *dst,
40  int len, unsigned int sum,
41  int *err_ptr)
42 {
43  int missing;
44 
45  missing = copy_from_user(dst, src, len);
46  if (missing) {
47  memset(dst + len - missing, 0, missing);
48  *err_ptr = -EFAULT;
49  }
50 
51  return csum_partial(dst, len, sum);
52 }