Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Apr 2012 14:29:57 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r234100 - projects/pf/head/sys/contrib/pf/net
Message-ID:  <201204101429.q3AETvab027613@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Tue Apr 10 14:29:56 2012
New Revision: 234100
URL: http://svn.freebsd.org/changeset/base/234100

Log:
  Simplify code from r234096.

Modified:
  projects/pf/head/sys/contrib/pf/net/pf_ioctl.c

Modified: projects/pf/head/sys/contrib/pf/net/pf_ioctl.c
==============================================================================
--- projects/pf/head/sys/contrib/pf/net/pf_ioctl.c	Tue Apr 10 14:01:09 2012	(r234099)
+++ projects/pf/head/sys/contrib/pf/net/pf_ioctl.c	Tue Apr 10 14:29:56 2012	(r234100)
@@ -2779,19 +2779,19 @@ DIOCGETSTATES_full:
 	case DIOCXBEGIN: {
 		struct pfioc_trans	*io = (struct pfioc_trans *)addr;
 		struct pfioc_trans_e	*ioes, *ioe;
+		size_t			 totlen;
 		int			 i;
 
 		if (io->esize != sizeof(*ioe)) {
 			error = ENODEV;
 			goto fail;
 		}
-		ioes = malloc(sizeof(*ioe) * io->size, M_TEMP, M_WAITOK);
-		for (i = 0, ioe = ioes; i < io->size; i++, ioe++) {
-			error = copyin(io->array + i, ioe, sizeof(*ioe));
-			if (error) {
-				free(ioes, M_TEMP);
-				goto fail;
-			}
+		totlen = sizeof(struct pfioc_trans_e) * io->size;
+		ioes = malloc(totlen, M_TEMP, M_WAITOK);
+		error = copyin(io->array, ioes, totlen);
+		if (error) {
+			free(ioes, M_TEMP);
+			goto fail;
 		}
 		PF_LOCK();
 		for (i = 0, ioe = ioes; i < io->size; i++, ioe++) {
@@ -2837,12 +2837,7 @@ DIOCGETSTATES_full:
 			}
 		}
 		PF_UNLOCK();
-		for (i = 0, ioe = ioes; i < io->size; i++, ioe++) {
-			error = copyout(ioe, io->array + i,
-			    sizeof(io->array[i]));
-			if (error)
-				break;
-		}
+		error = copyout(ioes, io->array, totlen);
 		free(ioes, M_TEMP);
 		break;
 	}
@@ -2850,19 +2845,19 @@ DIOCGETSTATES_full:
 	case DIOCXROLLBACK: {
 		struct pfioc_trans	*io = (struct pfioc_trans *)addr;
 		struct pfioc_trans_e	*ioe, *ioes;
+		size_t			 totlen;
 		int			 i;
 
 		if (io->esize != sizeof(*ioe)) {
 			error = ENODEV;
 			goto fail;
 		}
-		ioes = malloc(sizeof(*ioe) * io->size, M_TEMP, M_WAITOK);
-		for (i = 0, ioe = ioes; i < io->size; i++, ioe++) {
-			error = copyin(io->array + i, ioe, sizeof(*ioe));
-			if (error) {
-				free(ioes, M_TEMP);
-				goto fail;
-			}
+		totlen = sizeof(struct pfioc_trans_e) * io->size;
+		ioes = malloc(totlen, M_TEMP, M_WAITOK);
+		error = copyin(io->array, ioes, totlen);
+		if (error) {
+			free(ioes, M_TEMP);
+			goto fail;
 		}
 		PF_LOCK();
 		for (i = 0, ioe = ioes; i < io->size; i++, ioe++) {
@@ -2916,19 +2911,19 @@ DIOCGETSTATES_full:
 		struct pfioc_trans	*io = (struct pfioc_trans *)addr;
 		struct pfioc_trans_e	*ioe, *ioes;
 		struct pf_ruleset	*rs;
+		size_t			 totlen;
 		int			 i;
 
 		if (io->esize != sizeof(*ioe)) {
 			error = ENODEV;
 			goto fail;
 		}
-		ioes = malloc(sizeof(*ioe) * io->size, M_TEMP, M_WAITOK);
-		for (i = 0, ioe = ioes; i < io->size; i++, ioe++) {
-			error = copyin(io->array + i, ioe, sizeof(*ioe));
-			if (error) {
-				free(ioes, M_TEMP);
-				goto fail;
-			}
+		totlen = sizeof(struct pfioc_trans_e) * io->size;
+		ioes = malloc(totlen, M_TEMP, M_WAITOK);
+		error = copyin(io->array, ioes, totlen);
+		if (error) {
+			free(ioes, M_TEMP);
+			goto fail;
 		}
 		PF_LOCK();
 		/* First makes sure everything will succeed. */



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