static int quirk_btc_8193(struct hid_usage *usage, struct input_dev *input, unsigned long **bit, int *max) { if ((usage->hid & HID_USAGE_PAGE) != HID_UP_CONSUMER) return 0; switch (usage->hid & HID_USAGE) { case 0x230: map_key(BTN_MOUSE); break; case 0x231: map_rel(REL_WHEEL); break; /* * this keyboard has a scrollwheel implemented in * totally broken way. We map this usage temporarily * to HWHEEL and handle it in the event quirk handler */ case 0x232: map_rel(REL_HWHEEL); break; default: return 0; } return 1; }
/* * gen_db_file_maps() * * generates database mappings for "old_db" and "new_db". Returns a malloc'ed * array of mappings. nmaps is a return parameter which refers to the number * mappings. * * NOTE: Its the Caller's responsibility to free the returned array. */ FileNameMap * gen_db_file_maps(migratorContext *ctx, DbInfo *old_db, DbInfo *new_db, int *nmaps, const char *old_pgdata, const char *new_pgdata) { FileNameMap *maps; int relnum; int num_maps = 0; maps = (FileNameMap *) pg_malloc(ctx, sizeof(FileNameMap) * new_db->rel_arr.nrels); for (relnum = 0; relnum < new_db->rel_arr.nrels; relnum++) { RelInfo *newrel = &new_db->rel_arr.rels[relnum]; RelInfo *oldrel; /* toast tables are handled by their parent */ if (strcmp(newrel->nspname, "pg_toast") == 0) continue; oldrel = relarr_lookup_rel(ctx, &(old_db->rel_arr), newrel->nspname, newrel->relname, CLUSTER_OLD); map_rel(ctx, oldrel, newrel, old_db, new_db, old_pgdata, new_pgdata, maps + num_maps); num_maps++; /* * so much for the mapping of this relation. Now we need a mapping for * its corresponding toast relation if any. */ if (oldrel->toastrelid > 0) { RelInfo *new_toast; RelInfo *old_toast; char new_name[MAXPGPATH]; char old_name[MAXPGPATH]; /* construct the new and old relnames for the toast relation */ snprintf(old_name, sizeof(old_name), "pg_toast_%u", oldrel->reloid); snprintf(new_name, sizeof(new_name), "pg_toast_%u", newrel->reloid); /* look them up in their respective arrays */ old_toast = relarr_lookup_reloid(ctx, &old_db->rel_arr, oldrel->toastrelid, CLUSTER_OLD); new_toast = relarr_lookup_rel(ctx, &new_db->rel_arr, "pg_toast", new_name, CLUSTER_NEW); /* finally create a mapping for them */ map_rel(ctx, old_toast, new_toast, old_db, new_db, old_pgdata, new_pgdata, maps + num_maps); num_maps++; /* * also need to provide a mapping for the index of this toast * relation. The procedure is similar to what we did above for * toast relation itself, the only difference being that the * relnames need to be appended with _index. */ /* * construct the new and old relnames for the toast index * relations */ snprintf(old_name, sizeof(old_name), "%s_index", old_toast->relname); snprintf(new_name, sizeof(new_name), "pg_toast_%u_index", newrel->reloid); /* look them up in their respective arrays */ old_toast = relarr_lookup_rel(ctx, &old_db->rel_arr, "pg_toast", old_name, CLUSTER_OLD); new_toast = relarr_lookup_rel(ctx, &new_db->rel_arr, "pg_toast", new_name, CLUSTER_NEW); /* finally create a mapping for them */ map_rel(ctx, old_toast, new_toast, old_db, new_db, old_pgdata, new_pgdata, maps + num_maps); num_maps++; } } *nmaps = num_maps; return maps; }