/* after this function de_entry_num is set correctly only if name found or there was no entries with given hash value */ static int linear_search_in_dir_item (struct key * key, struct reiserfs_dir_entry * de, const char * name, int namelen) { int retval; int i; i = de->de_entry_num; if (i == I_ENTRY_COUNT (de->de_ih) || GET_HASH_VALUE (de->de_deh[i].deh_offset) != GET_HASH_VALUE (key->k_offset)) { i --; } #ifdef REISERFS_CHECK if (de->de_deh != B_I_DEH (de->de_bh, de->de_ih)) reiserfs_panic (0, "vs-7010: linear_search_in_dir_item: array of entry headers not found"); #endif /* REISERFS_CHECK */ de->de_deh += i; for (; i >= 0; i --, de->de_deh --) { if (GET_HASH_VALUE (de->de_deh->deh_offset) != GET_HASH_VALUE (key->k_offset)) { return POSITION_NOT_FOUND; } /* mark, that this generation number is used */ if (de->de_gen_number_bit_string) set_bit (GET_GENERATION_NUMBER (de->de_deh->deh_offset), de->de_gen_number_bit_string); /* de_bh, de_item_num, de_ih, de_deh are already set. Set others fields */ get_entry_attributes (de, i); if ((retval = try_name (de, name, namelen)) != POSITION_NOT_FOUND) { de->de_entry_num = i; return retval; } } if (GET_GENERATION_NUMBER (de->de_ih->ih_key.k_offset) == 0) return POSITION_NOT_FOUND; #ifdef REISERFS_CHECK if (de->de_ih->ih_key.k_offset <= DOT_DOT_OFFSET || de->de_item_num != 0) reiserfs_panic (0, "vs-7015: linear_search_in_dir_item: item must be 0-th item in block (%d)", de->de_item_num); #endif /* REISERFS_CHECK */ return GOTO_PREVIOUS_ITEM; }
bool code (PrologElement * parameters, PrologResolution * resolution) { if (parameters -> isEarth ()) return remove (); PrologAtom * selector = 0; PrologElement * a = 0, * b = 0, * c = 0, * d = 0; while (parameters -> isPair ()) { PrologElement * el = parameters -> getLeft (); if (el -> isAtom ()) selector = el -> getAtom (); else if (a == 0) a = el; else if (b == 0) b = el; else if (c == 0) c = el; else if (d == 0) d = el; parameters = parameters -> getRight (); } if (try_slide (selector, a)) return true; if (try_name (selector, a)) return true; if (try_length (selector, a)) return true; if (try_location (selector, a, b)) return true; if (try_margin (selector, a, b)) return true; if (try_colour (selector, a, b, c, d)) return true; if (try_view (selector)) return true; if (try_scale (selector)) return true; return false; }
dev_t name_to_dev_t(char *name) { char s[32]; char *p; dev_t res = 0; int part; #ifdef CONFIG_SYSFS int mkdir_err = sys_mkdir("/sys", 0700); if (sys_mount("sysfs", "/sys", "sysfs", 0, NULL) < 0) goto out; #endif if (strncmp(name, "/dev/", 5) != 0) { unsigned maj, min; if (sscanf(name, "%u:%u", &maj, &min) == 2) { res = MKDEV(maj, min); if (maj != MAJOR(res) || min != MINOR(res)) goto fail; } else { res = new_decode_dev(simple_strtoul(name, &p, 16)); if (*p) goto fail; } goto done; } name += 5; res = Root_NFS; if (strcmp(name, "nfs") == 0) goto done; res = Root_RAM0; if (strcmp(name, "ram") == 0) goto done; if (strlen(name) > 31) goto fail; strcpy(s, name); for (p = s; *p; p++) if (*p == '/') *p = '!'; res = try_name(s, 0); if (res) goto done; while (p > s && isdigit(p[-1])) p--; if (p == s || !*p || *p == '0') goto fail; part = simple_strtoul(p, NULL, 10); *p = '\0'; res = try_name(s, part); if (res) goto done; if (p < s + 2 || !isdigit(p[-2]) || p[-1] != 'p') goto fail; p[-1] = '\0'; res = try_name(s, part); done: #ifdef CONFIG_SYSFS sys_umount("/sys", 0); out: if (!mkdir_err) sys_rmdir("/sys"); #endif return res; fail: res = 0; goto done; }
dev_t name_to_dev_t(char *name) { char s[32]; char *p; dev_t res = 0; int part; #ifdef CONFIG_SYSFS int mkdir_err = sys_mkdir("/sys", 0700); if (sys_mount("sysfs", "/sys", "sysfs", 0, NULL) < 0) goto out; #endif if (strncmp(name, "/dev/", 5) != 0) { unsigned maj, min; if (sscanf(name, "%u:%u", &maj, &min) == 2) { res = MKDEV(maj, min); if (maj != MAJOR(res) || min != MINOR(res)) goto fail; } else { res = new_decode_dev(simple_strtoul(name, &p, 16)); if (*p) goto fail; } goto done; } name += 5; res = Root_NFS; if (strcmp(name, "nfs") == 0) goto done; res = Root_RAM0; if (strcmp(name, "ram") == 0) goto done; #if defined(CONFIG_MTD_BLOCK) || defined(CONFIG_MTD_BLOCK_RO) /* Allow specification of MTD device by name, e.g. * root=/dev/mtdblock:foo * Similar to JFFS2-specific hack in prepare_namespace(), * but more generic. */ if (strncmp(name, "mtdblock:", sizeof("mtdblock:") - 1) == 0) { struct mtd_info *mtd = get_mtd_device_nm(name + sizeof("mtdblock:") - 1); if (unlikely(!mtd)) goto fail; sprintf(name, "mtdblock%d", mtd->index); put_mtd_device(mtd); } #endif if (strlen(name) > 31) goto fail; strcpy(s, name); for (p = s; *p; p++) if (*p == '/') *p = '!'; res = try_name(s, 0); if (res) goto done; while (p > s && isdigit(p[-1])) p--; if (p == s || !*p || *p == '0') goto fail; part = simple_strtoul(p, NULL, 10); *p = '\0'; res = try_name(s, part); if (res) goto done; if (p < s + 2 || !isdigit(p[-2]) || p[-1] != 'p') goto fail; p[-1] = '\0'; res = try_name(s, part); done: #ifdef CONFIG_SYSFS sys_umount("/sys", 0); out: if (!mkdir_err) sys_rmdir("/sys"); #endif return res; fail: res = 0; goto done; }