Lines Matching refs:pFilter

36  * @param   pFilter     The filter to initialize.
40 USBLIB_DECL(void) USBFilterInit(PUSBFILTER pFilter, USBFILTERTYPE enmType)
42 memset(pFilter, 0, sizeof(*pFilter));
44 pFilter->u32Magic = USBFILTER_MAGIC;
45 pFilter->enmType = enmType;
46 for (unsigned i = 0; i < RT_ELEMENTS(pFilter->aFields); i++)
47 pFilter->aFields[i].enmMatch = USBFILTERMATCH_IGNORE;
54 * @param pFilter The target filter.
57 USBLIB_DECL(void) USBFilterClone(PUSBFILTER pFilter, PCUSBFILTER pToClone)
59 memcpy(pFilter, pToClone, sizeof(*pToClone));
66 * @param pFilter The filter to delete.
68 USBLIB_DECL(void) USBFilterDelete(PUSBFILTER pFilter)
70 pFilter->u32Magic = ~USBFILTER_MAGIC;
71 pFilter->enmType = USBFILTERTYPE_INVALID;
72 pFilter->offCurEnd = 0xfffff;
295 * @param pFilter The filter to validate.
297 USBLIB_DECL(int) USBFilterValidate(PCUSBFILTER pFilter)
299 if (!VALID_PTR(pFilter))
302 if (pFilter->u32Magic != USBFILTER_MAGIC)
305 if ( pFilter->enmType <= USBFILTERTYPE_INVALID
306 || pFilter->enmType >= USBFILTERTYPE_END)
308 Log(("USBFilter: %p - enmType=%d!\n", pFilter, pFilter->enmType));
312 if (pFilter->offCurEnd >= sizeof(pFilter->achStrTab))
314 Log(("USBFilter: %p - offCurEnd=%#x!\n", pFilter, pFilter->offCurEnd));
321 if (pFilter->achStrTab[0])
323 Log(("USBFilter: %p - bad null string\n", pFilter));
327 const char *psz = &pFilter->achStrTab[1];
328 while (psz < &pFilter->achStrTab[pFilter->offCurEnd])
330 const char *pszEnd = RTStrEnd(psz, &pFilter->achStrTab[sizeof(pFilter->achStrTab)] - psz);
334 pFilter, psz - &pFilter->achStrTab[0]));
338 uint16_t off = (uint16_t)(uintptr_t)(psz - &pFilter->achStrTab[0]);
340 for (i = 0; i < RT_ELEMENTS(pFilter->aFields); i++)
341 if ( USBFilterIsMethodString((USBFILTERMATCH)pFilter->aFields[i].enmMatch)
342 && pFilter->aFields[i].u16Value == off)
344 if (i >= RT_ELEMENTS(pFilter->aFields))
347 pFilter, psz - &pFilter->achStrTab[0], psz));
354 if ((uintptr_t)(psz - &pFilter->achStrTab[0] - 1) != pFilter->offCurEnd)
357 pFilter, pFilter->offCurEnd, psz - &pFilter->achStrTab[0] - 1));
361 while (psz < &pFilter->achStrTab[sizeof(pFilter->achStrTab)])
366 pFilter, psz - &pFilter->achStrTab[0], *psz));
377 for (unsigned i = 0; i < RT_ELEMENTS(pFilter->aFields); i++)
379 switch (pFilter->aFields[i].enmMatch)
383 if (pFilter->aFields[i].u16Value)
386 pFilter, i, pFilter->aFields[i].enmMatch, pFilter->aFields[i].u16Value));
396 pFilter, i, pFilter->aFields[i].enmMatch));
406 pFilter, i, pFilter->aFields[i].enmMatch));
409 if ( pFilter->aFields[i].u16Value >= pFilter->offCurEnd
410 && pFilter->offCurEnd)
413 pFilter, i, pFilter->aFields[i].enmMatch, pFilter->aFields[i].u16Value, pFilter->offCurEnd));
416 psz = &pFilter->achStrTab[pFilter->aFields[i].u16Value];
421 pFilter, i, pFilter->aFields[i].enmMatch, psz, rc));
431 pFilter, i, pFilter->aFields[i].enmMatch));
434 if ( pFilter->aFields[i].u16Value >= pFilter->offCurEnd
435 && pFilter->offCurEnd)
438 pFilter, i, pFilter->aFields[i].enmMatch, pFilter->aFields[i].u16Value, pFilter->offCurEnd));
448 pFilter, i, pFilter->aFields[i].enmMatch));
451 if ( pFilter->aFields[i].u16Value >= pFilter->offCurEnd
452 && pFilter->offCurEnd)
455 pFilter, i, pFilter->aFields[i].enmMatch, pFilter->aFields[i].u16Value, pFilter->offCurEnd));
458 psz = &pFilter->achStrTab[pFilter->aFields[i].u16Value];
463 pFilter, i, pFilter->aFields[i].enmMatch, psz, rc));
469 Log(("USBFilter: %p - #%d enmMatch=%d!\n", pFilter, i, pFilter->aFields[i].enmMatch));
483 * @param pFilter The filter.
486 DECLINLINE(const char *) usbfilterGetString(PCUSBFILTER pFilter, USBFILTERIDX enmFieldIdx)
490 switch (pFilter->aFields[enmFieldIdx].enmMatch)
498 Assert(pFilter->aFields[enmFieldIdx].u16Value < sizeof(pFilter->achStrTab));
499 return &pFilter->achStrTab[pFilter->aFields[enmFieldIdx].u16Value];
502 AssertMsgFailed(("%d\n", pFilter->aFields[enmFieldIdx].enmMatch));
520 * @param pFilter The filter.
523 DECLINLINE(int) usbfilterGetNum(PCUSBFILTER pFilter, USBFILTERIDX enmFieldIdx)
527 switch (pFilter->aFields[enmFieldIdx].enmMatch)
531 return pFilter->aFields[enmFieldIdx].u16Value;
534 AssertMsgFailed(("%d\n", pFilter->aFields[enmFieldIdx].enmMatch));
741 * @param pFilter The filter to match with.
749 USBLIB_DECL(bool) USBFilterMatch(PCUSBFILTER pFilter, PCUSBFILTER pDevice)
751 return USBFilterMatchRated(pFilter, pDevice) > 0;
767 * @param pFilter The filter to match with.
775 USBLIB_DECL(int) USBFilterMatchRated(PCUSBFILTER pFilter, PCUSBFILTER pDevice)
778 dprintf(("USBFilterMatchRated: %p %p\n", pFilter, pDevice));
780 for (unsigned i = 0; i < RT_ELEMENTS(pFilter->aFields); i++)
782 switch (pFilter->aFields[i].enmMatch)
799 || pFilter->aFields[i].u16Value != pDevice->aFields[i].u16Value)
804 dprintf(("filter match[%d]: !num_exact %#x (filter) != %#x (device)\n", i, pFilter->aFields[i].u16Value, pDevice->aFields[i].u16Value));
812 && pFilter->aFields[i].u16Value != pDevice->aFields[i].u16Value)
814 dprintf(("filter match[%d]: !num_exact_np %#x (filter) != %#x (device)\n", i, pFilter->aFields[i].u16Value, pDevice->aFields[i].u16Value));
822 || !usbfilterMatchNumExpression(usbfilterGetString(pFilter, (USBFILTERIDX)i),
833 && !usbfilterMatchNumExpression(usbfilterGetString(pFilter, (USBFILTERIDX)i),
844 || strcmp(usbfilterGetString(pFilter, (USBFILTERIDX)i),
855 && strcmp(usbfilterGetString(pFilter, (USBFILTERIDX)i),
866 || !usbfilterMatchStringPattern(usbfilterGetString(pFilter, (USBFILTERIDX)i),
877 && !usbfilterMatchStringPattern(usbfilterGetString(pFilter, (USBFILTERIDX)i),
887 AssertMsgFailed(("#%d: %d\n", i, pFilter->aFields[i].enmMatch));
894 return iRate == 2 * RT_ELEMENTS(pFilter->aFields)
896 : (iRate * 100) / (2 * RT_ELEMENTS(pFilter->aFields));
905 * @param pFilter The filter to match with.
911 USBLIB_DECL(bool) USBFilterMatchDevice(PCUSBFILTER pFilter, PUSBDEVICE pDevice)
913 for (unsigned i = 0; i < RT_ELEMENTS(pFilter->aFields); i++)
915 switch (pFilter->aFields[i].enmMatch)
954 switch (pFilter->aFields[i].enmMatch)
958 if (pFilter->aFields[i].u16Value != u16Value)
963 if (!usbfilterMatchNumExpression(usbfilterGetString(pFilter, (USBFILTERIDX)i), u16Value))
983 switch (pFilter->aFields[i].enmMatch)
987 || strcmp(usbfilterGetString(pFilter, (USBFILTERIDX)i), psz))
993 && strcmp(usbfilterGetString(pFilter, (USBFILTERIDX)i), psz))
999 || !usbfilterMatchStringPattern(usbfilterGetString(pFilter, (USBFILTERIDX)i), psz))
1005 && !usbfilterMatchStringPattern(usbfilterGetString(pFilter, (USBFILTERIDX)i), psz))
1013 AssertMsgFailed(("#%d: %d\n", i, pFilter->aFields[i].enmMatch));
1026 * @param pFilter The first filter.
1029 USBLIB_DECL(bool) USBFilterIsIdentical(PCUSBFILTER pFilter, PCUSBFILTER pFilter2)
1032 return memcmp(pFilter, pFilter2, sizeof(*pFilter)) == 0;
1042 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1044 * @param pFilter The filter.
1047 USBLIB_DECL(int) USBFilterSetFilterType(PUSBFILTER pFilter, USBFILTERTYPE enmType)
1049 AssertReturn(pFilter->u32Magic == USBFILTER_MAGIC, VERR_INVALID_MAGIC);
1052 pFilter->enmType = enmType;
1071 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1073 * @param pFilter The filter.
1077 static int usbfilterSetString(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx, const char *pszString)
1082 AssertReturn(pFilter->u32Magic == USBFILTER_MAGIC, VERR_INVALID_MAGIC);
1086 Assert(pFilter->offCurEnd < sizeof(pFilter->achStrTab));
1087 Assert(pFilter->achStrTab[pFilter->offCurEnd] == '\0');
1092 if ( USBFilterIsMethodUsingStringValue((USBFILTERMATCH)pFilter->aFields[enmFieldIdx].enmMatch)
1093 && pFilter->aFields[enmFieldIdx].u16Value != 0)
1095 uint32_t off = pFilter->aFields[enmFieldIdx].u16Value;
1096 pFilter->aFields[enmFieldIdx].u16Value = 0; /* Assign it to the NULL string. */
1098 unsigned cchShift = (unsigned)strlen(&pFilter->achStrTab[off]) + 1;
1099 ssize_t cchToMove = (pFilter->offCurEnd + 1) - (off + cchShift);
1104 memmove(&pFilter->achStrTab[off], &pFilter->achStrTab[off + cchShift], cchToMove);
1105 for (unsigned i = 0; i < RT_ELEMENTS(pFilter->aFields); i++)
1106 if ( pFilter->aFields[i].u16Value >= off
1107 && USBFilterIsMethodUsingStringValue((USBFILTERMATCH)pFilter->aFields[i].enmMatch))
1108 pFilter->aFields[i].u16Value -= cchShift;
1110 pFilter->offCurEnd -= cchShift;
1111 Assert(pFilter->offCurEnd < sizeof(pFilter->achStrTab));
1112 Assert(pFilter->offCurEnd + cchShift <= sizeof(pFilter->achStrTab));
1115 memset(&pFilter->achStrTab[pFilter->offCurEnd], '\0', cchShift);
1123 pFilter->aFields[enmFieldIdx].u16Value = 0;
1127 if (pFilter->offCurEnd + cch + 2 > sizeof(pFilter->achStrTab))
1130 pFilter->aFields[enmFieldIdx].u16Value = pFilter->offCurEnd + 1;
1131 memcpy(&pFilter->achStrTab[pFilter->offCurEnd + 1], pszString, cch + 1);
1132 pFilter->offCurEnd += (uint32_t)cch + 1;
1148 * @param pFilter The filter.
1151 static int usbfilterDeleteAnyStringValue(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx)
1154 if ( USBFilterIsMethodUsingStringValue((USBFILTERMATCH)pFilter->aFields[enmFieldIdx].enmMatch)
1155 && pFilter->aFields[enmFieldIdx].u16Value != 0)
1156 rc = usbfilterSetString(pFilter, enmFieldIdx, "");
1169 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1171 * @param pFilter The filter.
1174 USBLIB_DECL(int) USBFilterSetIgnore(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx)
1176 int rc = usbfilterDeleteAnyStringValue(pFilter, enmFieldIdx);
1179 pFilter->aFields[enmFieldIdx].enmMatch = USBFILTERMATCH_IGNORE;
1180 pFilter->aFields[enmFieldIdx].u16Value = 0;
1192 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1194 * @param pFilter The filter.
1197 USBLIB_DECL(int) USBFilterSetPresentOnly(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx)
1199 int rc = usbfilterDeleteAnyStringValue(pFilter, enmFieldIdx);
1202 pFilter->aFields[enmFieldIdx].enmMatch = USBFILTERMATCH_PRESENT;
1203 pFilter->aFields[enmFieldIdx].u16Value = 0;
1215 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1217 * @param pFilter The filter.
1223 USBLIB_DECL(int) USBFilterSetNumExact(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx, uint16_t u16Value, bool fMustBePresent)
1228 rc = usbfilterDeleteAnyStringValue(pFilter, enmFieldIdx);
1231 pFilter->aFields[enmFieldIdx].u16Value = u16Value;
1232 pFilter->aFields[enmFieldIdx].enmMatch = fMustBePresent ? USBFILTERMATCH_NUM_EXACT : USBFILTERMATCH_NUM_EXACT_NP;
1248 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1250 * @param pFilter The filter.
1256 USBLIB_DECL(int) USBFilterSetNumExpression(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx, const char *pszExpression, bool fMustBePresent)
1270 rc = usbfilterSetString(pFilter, enmFieldIdx, pszExpression);
1272 pFilter->aFields[enmFieldIdx].enmMatch = fMustBePresent ? USBFILTERMATCH_NUM_EXPRESSION : USBFILTERMATCH_NUM_EXPRESSION_NP;
1289 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1291 * @param pFilter The filter.
1297 USBLIB_DECL(int) USBFilterSetStringExact(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx, const char *pszValue, bool fMustBePresent)
1302 rc = usbfilterSetString(pFilter, enmFieldIdx, pszValue);
1304 pFilter->aFields[enmFieldIdx].enmMatch = fMustBePresent ? USBFILTERMATCH_STR_EXACT : USBFILTERMATCH_STR_EXACT_NP;
1318 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1320 * @param pFilter The filter.
1326 USBLIB_DECL(int) USBFilterSetStringPattern(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx, const char *pszPattern, bool fMustBePresent)
1334 rc = usbfilterSetString(pFilter, enmFieldIdx, pszPattern);
1336 pFilter->aFields[enmFieldIdx].enmMatch = fMustBePresent ? USBFILTERMATCH_STR_PATTERN : USBFILTERMATCH_STR_PATTERN_NP;
1355 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1357 * @param pFilter The filter.
1362 USBLIB_DECL(int) USBFilterSetMustBePresent(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx, bool fMustBePresent)
1364 AssertPtrReturn(pFilter, VERR_INVALID_POINTER);
1365 AssertReturn(pFilter->u32Magic == USBFILTER_MAGIC, VERR_INVALID_MAGIC);
1368 USBFILTERMATCH enmMatch = (USBFILTERMATCH)pFilter->aFields[enmFieldIdx].enmMatch;
1396 AssertMsgFailedReturn(("%p: enmFieldIdx=%d enmMatch=%d\n", pFilter, enmFieldIdx, enmMatch), VERR_INVALID_MAGIC);
1429 AssertMsgFailedReturn(("%p: enmFieldIdx=%d enmMatch=%d\n", pFilter, enmFieldIdx, enmMatch), VERR_INVALID_MAGIC);
1433 pFilter->aFields[enmFieldIdx].enmMatch = enmMatch;
1443 * @param pFilter The filter.
1445 USBLIB_DECL(USBFILTERTYPE) USBFilterGetFilterType(PCUSBFILTER pFilter)
1447 AssertReturn(pFilter->u32Magic == USBFILTER_MAGIC, USBFILTERTYPE_INVALID);
1448 return pFilter->enmType;
1456 * @param pFilter The filter.
1459 USBLIB_DECL(USBFILTERMATCH) USBFilterGetMatchingMethod(PCUSBFILTER pFilter, USBFILTERIDX enmFieldIdx)
1461 if ( pFilter->u32Magic == USBFILTER_MAGIC
1463 return (USBFILTERMATCH)pFilter->aFields[enmFieldIdx].enmMatch;
1476 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1478 * @param pFilter The filter.
1482 USBLIB_DECL(int) USBFilterQueryNum(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx, uint16_t *pu16Value)
1484 AssertReturn(pFilter->u32Magic == USBFILTER_MAGIC, VERR_INVALID_MAGIC);
1485 int iValue = usbfilterGetNum(pFilter, enmFieldIdx);
1500 * @param pFilter The filter.
1503 USBLIB_DECL(int) USBFilterGetNum(PCUSBFILTER pFilter, USBFILTERIDX enmFieldIdx)
1505 AssertReturn(pFilter->u32Magic == USBFILTER_MAGIC, -1);
1506 return usbfilterGetNum(pFilter, enmFieldIdx);
1520 * @retval VERR_INVALID_MAGIC if pFilter is invalid.
1522 * @param pFilter The filter.
1527 USBLIB_DECL(int) USBFilterQueryString(PUSBFILTER pFilter, USBFILTERIDX enmFieldIdx, char *pszBuf, size_t cchBuf)
1529 AssertReturn(pFilter->u32Magic == USBFILTER_MAGIC, VERR_INVALID_MAGIC);
1531 const char *psz = usbfilterGetString(pFilter, enmFieldIdx);
1558 * @param pFilter The filter.
1561 USBLIB_DECL(const char *) USBFilterGetString(PCUSBFILTER pFilter, USBFILTERIDX enmFieldIdx)
1563 AssertReturn(pFilter->u32Magic == USBFILTER_MAGIC, NULL);
1565 const char *psz = usbfilterGetString(pFilter, enmFieldIdx);
1576 * @param pFilter The filter.
1579 USBLIB_DECL(ssize_t) USBFilterGetStringLen(PCUSBFILTER pFilter, USBFILTERIDX enmFieldIdx)
1581 if (RT_LIKELY(pFilter->u32Magic == USBFILTER_MAGIC))
1583 const char *psz = usbfilterGetString(pFilter, enmFieldIdx);
1597 * @param pFilter The filter.
1599 USBLIB_DECL(bool) USBFilterHasAnySubstatialCriteria(PCUSBFILTER pFilter)
1601 AssertReturn(pFilter->u32Magic == USBFILTER_MAGIC, false);
1603 for (unsigned i = 0; i < RT_ELEMENTS(pFilter->aFields); i++)
1605 switch (pFilter->aFields[i].enmMatch)
1620 const char *psz = usbfilterGetString(pFilter, (USBFILTERIDX)i);
1634 const char *psz = usbfilterGetString(pFilter, (USBFILTERIDX)i);