 0458a953d8
			
		
	
	
	0458a953d8
	
	
	
		
			
			Replaced the use of a Variable Length Array In Struct (VLAIS) with a C99 compliant equivalent. This patch instead allocates the appropriate amount of memory using a char array using the SHASH_DESC_ON_STACK macro. The new code can be compiled with both gcc and clang. Signed-off-by: Vinícius Tinti <viniciustinti@gmail.com> Reviewed-by: Jan-Simon Möller <dl9pf@gmx.de> Reviewed-by: Mark Charlebois <charlebm@gmail.com> Signed-off-by: Behan Webster <behanw@converseincode.com> Acked-by: Chris Mason <clm@fb.com> Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Cc: "David S. Miller" <davem@davemloft.net>
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2014 Filipe David Borba Manana <fdmanana@gmail.com>
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU General Public
 | |
|  * License v2 as published by the Free Software Foundation.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|  * General Public License for more details.
 | |
|  */
 | |
| 
 | |
| #include <crypto/hash.h>
 | |
| #include <linux/err.h>
 | |
| #include "hash.h"
 | |
| 
 | |
| static struct crypto_shash *tfm;
 | |
| 
 | |
| int __init btrfs_hash_init(void)
 | |
| {
 | |
| 	tfm = crypto_alloc_shash("crc32c", 0, 0);
 | |
| 
 | |
| 	return PTR_ERR_OR_ZERO(tfm);
 | |
| }
 | |
| 
 | |
| void btrfs_hash_exit(void)
 | |
| {
 | |
| 	crypto_free_shash(tfm);
 | |
| }
 | |
| 
 | |
| u32 btrfs_crc32c(u32 crc, const void *address, unsigned int length)
 | |
| {
 | |
| 	SHASH_DESC_ON_STACK(shash, tfm);
 | |
| 	u32 *ctx = (u32 *)shash_desc_ctx(shash);
 | |
| 	int err;
 | |
| 
 | |
| 	shash->tfm = tfm;
 | |
| 	shash->flags = 0;
 | |
| 	*ctx = crc;
 | |
| 
 | |
| 	err = crypto_shash_update(shash, address, length);
 | |
| 	BUG_ON(err);
 | |
| 
 | |
| 	return *ctx;
 | |
| }
 |