+ numfilter = 0;
+ *err_mask = 0;
+
+ while (nptr) {
+
+ ptr = nptr+1; /* hop behind the ',' */
+ nptr = strchr(ptr, ','); /* update exit condition */
+
+ if (sscanf(ptr, "%x:%x",
+ &rfilter[numfilter].can_id,
+ &rfilter[numfilter].can_mask) == 2) {
+ rfilter[numfilter].can_mask &= ~CAN_ERR_FLAG;
+ numfilter++;
+ } else if (sscanf(ptr, "%x~%x",
+ &rfilter[numfilter].can_id,
+ &rfilter[numfilter].can_mask) == 2) {
+ rfilter[numfilter].can_id |= CAN_INV_FILTER;
+ rfilter[numfilter].can_mask &= ~CAN_ERR_FLAG;
+ numfilter++;
+ } else if (sscanf(ptr, "#%x", err_mask) != 1) {
+ cegw_errno = CEGW_ERR_FLTPARSE;
+ free(rfilter);
+ return -1;
+ }
+ }
+
+ *filter = rfilter;
+ *out_numfilter = numfilter;