svn commit: r234100 - projects/pf/head/sys/contrib/pf/net
Gleb Smirnoff
glebius at FreeBSD.org
Tue Apr 10 14:29:57 UTC 2012
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. */
More information about the svn-src-projects
mailing list