Lines Matching refs:pc

328 handle_match (ParsingContext * pc, const char **attr)  in handle_match()  argument
347 pc->device->udi, in handle_match()
350 HAL_ERROR (("Could not resolve keypath '%s' on udi '%s'", key, pc->device->udi)); in handle_match()
672 handle_merge (ParsingContext * pc, const char **attr) in handle_merge() argument
676 pc->merge_type = MERGE_TYPE_UNKNOWN; in handle_merge()
688 strncpy (pc->merge_key, attr[1], MAX_KEY_SIZE); in handle_merge()
695 pc->merge_type = MERGE_TYPE_STRING; in handle_merge()
699 pc->merge_type = MERGE_TYPE_BOOLEAN; in handle_merge()
703 pc->merge_type = MERGE_TYPE_INT32; in handle_merge()
707 pc->merge_type = MERGE_TYPE_UINT64; in handle_merge()
711 pc->merge_type = MERGE_TYPE_DOUBLE; in handle_merge()
715 pc->merge_type = MERGE_TYPE_STRLIST; in handle_merge()
719 pc->merge_type = MERGE_TYPE_COPY_PROPERTY; in handle_merge()
732 handle_append_prepend (ParsingContext * pc, const char **attr) in handle_append_prepend() argument
736 pc->merge_type = MERGE_TYPE_UNKNOWN; in handle_append_prepend()
747 strncpy (pc->merge_key, attr[1], MAX_KEY_SIZE); in handle_append_prepend()
754 pc->merge_type = MERGE_TYPE_STRING; in handle_append_prepend()
758 pc->merge_type = MERGE_TYPE_STRLIST; in handle_append_prepend()
762 pc->merge_type = MERGE_TYPE_COPY_PROPERTY; in handle_append_prepend()
776 handle_spawn (ParsingContext * pc, const char **attr) in handle_spawn() argument
780 pc->merge_type = MERGE_TYPE_UNKNOWN; in handle_spawn()
792 strncpy (pc->merge_key, attr[1], MAX_KEY_SIZE); in handle_spawn()
794 pc->merge_type = MERGE_TYPE_SPAWN; in handle_spawn()
804 handle_remove (ParsingContext * pc, const char **attr) in handle_remove() argument
808 pc->merge_type = MERGE_TYPE_UNKNOWN; in handle_remove()
819 strncpy (pc->merge_key, attr[1], MAX_KEY_SIZE); in handle_remove()
827 pc->merge_type = MERGE_TYPE_STRLIST; in handle_remove()
830 pc->merge_type = MERGE_TYPE_UNKNOWN; in handle_remove()
834 pc->merge_type = MERGE_TYPE_REMOVE; in handle_remove()
846 handle_clear (ParsingContext * pc, const char **attr) in handle_clear() argument
850 pc->merge_type = MERGE_TYPE_UNKNOWN; in handle_clear()
866 strncpy (pc->merge_key, attr[1], MAX_KEY_SIZE); in handle_clear()
868 pc->merge_type = MERGE_TYPE_CLEAR; in handle_clear()
878 parsing_abort (ParsingContext * pc) in parsing_abort() argument
882 pc->aborted = TRUE; in parsing_abort()
892 start (ParsingContext * pc, const char *el, const char **attr) in start() argument
894 if (pc->aborted) in start()
897 pc->cdata_buf_len = 0; in start()
899 pc->merge_type = MERGE_TYPE_UNKNOWN; in start()
915 if (pc->curelem != CURELEM_DEVICE in start()
916 && pc->curelem != CURELEM_MATCH) { in start()
919 pc->file, in start()
920 XML_GetCurrentLineNumber (pc->parser), in start()
921 XML_GetCurrentColumnNumber (pc->parser))); in start()
922 parsing_abort (pc); in start()
925 pc->curelem = CURELEM_MATCH; in start()
928 if (pc->match_ok) { in start()
929 if (!handle_match (pc, attr)) { in start()
931 pc->match_depth_first_fail = pc->depth; in start()
932 pc->match_ok = FALSE; in start()
936 if (pc->curelem != CURELEM_DEVICE in start()
937 && pc->curelem != CURELEM_MATCH) { in start()
940 pc->file, in start()
941 XML_GetCurrentLineNumber (pc->parser), in start()
942 XML_GetCurrentColumnNumber (pc->parser))); in start()
943 parsing_abort (pc); in start()
946 pc->curelem = CURELEM_MERGE; in start()
947 if (pc->match_ok) { in start()
948 handle_merge (pc, attr); in start()
953 if (pc->curelem != CURELEM_DEVICE in start()
954 && pc->curelem != CURELEM_MATCH) { in start()
957 pc->file, in start()
958 XML_GetCurrentLineNumber (pc->parser), in start()
959 XML_GetCurrentColumnNumber (pc->parser))); in start()
960 parsing_abort (pc); in start()
963 pc->curelem = CURELEM_APPEND; in start()
964 if (pc->match_ok) { in start()
965 handle_append_prepend (pc, attr); in start()
970 if (pc->curelem != CURELEM_DEVICE in start()
971 && pc->curelem != CURELEM_MATCH) { in start()
974 pc->file, in start()
975 XML_GetCurrentLineNumber (pc->parser), in start()
976 XML_GetCurrentColumnNumber (pc->parser))); in start()
977 parsing_abort (pc); in start()
980 pc->curelem = CURELEM_PREPEND; in start()
981 if (pc->match_ok) { in start()
982 handle_append_prepend (pc, attr); in start()
987 if (pc->curelem != CURELEM_DEVICE in start()
988 && pc->curelem != CURELEM_MATCH) { in start()
991 pc->file, in start()
992 XML_GetCurrentLineNumber (pc->parser), in start()
993 XML_GetCurrentColumnNumber (pc->parser))); in start()
994 parsing_abort (pc); in start()
997 pc->curelem = CURELEM_REMOVE; in start()
998 if (pc->match_ok) { in start()
999 handle_remove (pc, attr); in start()
1004 if (pc->curelem != CURELEM_DEVICE in start()
1005 && pc->curelem != CURELEM_MATCH) { in start()
1008 pc->file, in start()
1009 XML_GetCurrentLineNumber (pc->parser), in start()
1010 XML_GetCurrentColumnNumber (pc->parser))); in start()
1011 parsing_abort (pc); in start()
1014 pc->curelem = CURELEM_CLEAR; in start()
1015 if (pc->match_ok) { in start()
1016 handle_clear (pc, attr); in start()
1021 if (pc->curelem != CURELEM_DEVICE_INFO) { in start()
1024 pc->file, in start()
1025 XML_GetCurrentLineNumber (pc->parser), in start()
1026 XML_GetCurrentColumnNumber (pc->parser))); in start()
1027 parsing_abort (pc); in start()
1029 pc->curelem = CURELEM_DEVICE; in start()
1031 if (pc->curelem != CURELEM_UNKNOWN) { in start()
1034 pc->file, in start()
1035 XML_GetCurrentLineNumber (pc->parser), in start()
1036 XML_GetCurrentColumnNumber (pc->parser))); in start()
1037 parsing_abort (pc); in start()
1039 pc->curelem = CURELEM_DEVICE_INFO; in start()
1041 if (pc->curelem != CURELEM_MATCH) { in start()
1044 pc->file, in start()
1045 XML_GetCurrentLineNumber (pc->parser), in start()
1046 XML_GetCurrentColumnNumber (pc->parser))); in start()
1047 parsing_abort (pc); in start()
1050 pc->curelem = CURELEM_SPAWN; in start()
1051 if (pc->match_ok) { in start()
1052 handle_spawn (pc, attr); in start()
1057 pc->file, in start()
1058 XML_GetCurrentLineNumber (pc->parser), in start()
1059 XML_GetCurrentColumnNumber (pc->parser), el)); in start()
1060 parsing_abort (pc); in start()
1064 assert (pc->depth < MAX_DEPTH); in start()
1066 pc->depth++; in start()
1069 pc->curelem_stack[pc->depth] = pc->curelem; in start()
1090 end (ParsingContext * pc, const char *el) in end() argument
1092 if (pc->aborted) in end()
1095 pc->cdata_buf[pc->cdata_buf_len] = '\0'; in end()
1099 if (pc->curelem == CURELEM_MERGE && pc->match_ok) { in end()
1101 pc->device_matched = TRUE; in end()
1103 switch (pc->merge_type) { in end()
1105 hal_device_property_set_string (pc->device, pc->merge_key, pc->cdata_buf); in end()
1110 int type = hal_device_property_get_type (pc->device, pc->merge_key); in end()
1112 hal_device_property_remove (pc->device, pc->merge_key); in end()
1113 hal_device_property_strlist_append (pc->device, pc->merge_key, pc->cdata_buf); in end()
1123 value = strtol (pc->cdata_buf, NULL, 0); in end()
1127 hal_device_property_set_int (pc->device, in end()
1128 pc->merge_key, value); in end()
1137 value = strtoull (pc->cdata_buf, NULL, 0); in end()
1141 hal_device_property_set_uint64 (pc->device, in end()
1142 pc->merge_key, value); in end()
1147 hal_device_property_set_bool (pc->device, pc->merge_key, in end()
1148 (strcmp (pc->cdata_buf, in end()
1154 hal_device_property_set_double (pc->device, pc->merge_key, in end()
1155 atof (pc->cdata_buf)); in end()
1166 if (!resolve_udiprop_path (pc->cdata_buf, in end()
1167 pc->device->udi, in end()
1170 HAL_ERROR (("Could not resolve keypath '%s' on udi '%s'", pc->cdata_buf, pc->device->udi)); in end()
1181 hal_device_copy_property (d, prop_to_merge, pc->device, pc->merge_key); in end()
1189 pc->merge_type, pc->merge_type)); in end()
1192 } else if (pc->curelem == CURELEM_APPEND && pc->match_ok && in end()
1193 (hal_device_property_get_type (pc->device, pc->merge_key) == HAL_PROPERTY_TYPE_STRING || in end()
1194 hal_device_property_get_type (pc->device, pc->merge_key) == HAL_PROPERTY_TYPE_STRLIST || in end()
1195 hal_device_property_get_type (pc->device, pc->merge_key) == HAL_PROPERTY_TYPE_INVALID)) { in end()
1200 pc->device_matched = TRUE; in end()
1202 if (pc->merge_type == MERGE_TYPE_STRLIST) { in end()
1203 hal_device_property_strlist_append (pc->device, pc->merge_key, pc->cdata_buf); in end()
1207 switch (pc->merge_type) { in end()
1209 strncpy (buf, pc->cdata_buf, sizeof (buf)); in end()
1213 hal_device_property_get_as_string (pc->device, pc->cdata_buf, buf, sizeof (buf)); in end()
1217 HAL_ERROR (("Unknown merge_type=%d='%c'", pc->merge_type, pc->merge_type)); in end()
1221 existing_string = hal_device_property_get_string (pc->device, pc->merge_key); in end()
1228 hal_device_property_set_string (pc->device, pc->merge_key, buf2); in end()
1230 } else if (pc->curelem == CURELEM_PREPEND && pc->match_ok && in end()
1231 (hal_device_property_get_type (pc->device, pc->merge_key) == HAL_PROPERTY_TYPE_STRING || in end()
1232 hal_device_property_get_type (pc->device, pc->merge_key) == HAL_PROPERTY_TYPE_STRLIST || in end()
1233 hal_device_property_get_type (pc->device, pc->merge_key) == HAL_PROPERTY_TYPE_INVALID)) { in end()
1238 pc->device_matched = TRUE; in end()
1240 if (pc->merge_type == MERGE_TYPE_STRLIST) { in end()
1241 hal_device_property_strlist_prepend (pc->device, pc->merge_key, pc->cdata_buf); in end()
1245 switch (pc->merge_type) { in end()
1247 strncpy (buf, pc->cdata_buf, sizeof (buf)); in end()
1251 hal_device_property_get_as_string (pc->device, pc->cdata_buf, buf, sizeof (buf)); in end()
1255 HAL_ERROR (("Unknown merge_type=%d='%c'", pc->merge_type, pc->merge_type)); in end()
1259 existing_string = hal_device_property_get_string (pc->device, pc->merge_key); in end()
1266 hal_device_property_set_string (pc->device, pc->merge_key, buf2); in end()
1268 } else if (pc->curelem == CURELEM_REMOVE && pc->match_ok) { in end()
1270 if (pc->merge_type == MERGE_TYPE_STRLIST) { in end()
1272 hal_device_property_strlist_remove (pc->device, pc->merge_key, pc->cdata_buf); in end()
1275 if (strlen (pc->cdata_buf) == 0) { in end()
1276 hal_device_property_remove (pc->device, pc->merge_key); in end()
1279 } else if (pc->merge_type == MERGE_TYPE_SPAWN) { in end()
1282 spawned = hal_device_store_find (hald_get_gdl (), pc->merge_key); in end()
1284 spawned = hal_device_store_find (hald_get_tdl (), pc->merge_key); in end()
1288 pc->merge_key, pc->device->udi)); in end()
1292 hal_device_property_set_string (spawned, "info.udi", pc->merge_key); in end()
1293 hal_device_property_set_string (spawned, "info.parent", pc->device->udi); in end()
1294 hal_device_set_udi (spawned, pc->merge_key); in end()
1304 } else if (pc->curelem == CURELEM_CLEAR && pc->match_ok) { in end()
1305 if (pc->merge_type == MERGE_TYPE_CLEAR) { in end()
1306 hal_device_property_strlist_clear (pc->device, pc->merge_key); in end()
1311 pc->cdata_buf_len = 0; in end()
1312 pc->depth--; in end()
1315 pc->curelem = pc->curelem_stack[pc->depth]; in end()
1318 if (pc->depth <= pc->match_depth_first_fail) in end()
1319 pc->match_ok = TRUE; in end()
1329 cdata (ParsingContext * pc, const char *s, int len) in cdata() argument
1334 if (pc->aborted) in cdata()
1337 bytes_left = CDATA_BUF_SIZE - pc->cdata_buf_len; in cdata()
1348 memcpy (pc->cdata_buf + pc->cdata_buf_len, s, in cdata()
1351 pc->cdata_buf_len += bytes_to_copy; in cdata()