- char buf[CONFIG_SYS_ENV_NAMELEN+1];
- int len;
- env_item_t e = *ep;
-
-debug("-- env_item_save(%04x, %04x, %d)\n",
- ep, offset, space_left);
-
- len = ee_name_get(buf, ep);
- if (len == 0)
- return 0;
- buf[len++] = '=';
- space_left -= len;
-
-if ((unsigned) len < sizeof(buf))
- buf[len] = '\0'; /* terminate for debugging */
-debug(" len: %d, buf: '%s', space_left: %d\n", len, buf, space_left);
-
- if (space_left <= 0)
- return 0;
-
- eeprom_update_block(buf, (uint8_t *) offset, len);
- offset += len;
-
- if (e.val.ram != NULL) {
- char c;
- do {
- if (e.flags & EF_V_EEP)
- c = env_get_char(e.val.eep++);
- else
- c = *e.val.ram++;
-
- eeprom_update_byte((uint8_t *) offset, c);
- offset++;
- space_left--;
- len++;
- } while ((c != '\0') && space_left );
- }
- return len;
-}
-
-
-/*
- * Update
- *
- */
-int env_item_update(env_item_t *ep)
-{
- char buf[CONFIG_SYS_ENV_NAMELEN+1];
- uint_fast8_t len;
- char c;
- unsigned pos = 0;
-
- /* get name from old loc. (eeprom or ram */
- len = ee_name_get(buf, ep);
- buf[len++] = '=';
-
-debug("-- env_item_update(%04x)\n", ep);
-if (len < sizeof(buf))
- buf[len] = '\0'; /* terminate for debugging */
-debug(" len: %d, buf: '%s'\n", len, buf);
-
- /* search this name in new eeprom env */
- /* TODO: eliminate this ugly hack */
- uint8_t save_env_valid = env_valid;
- env_valid = (env_valid == 2) ? 1 : 2;
-
-debug(" len: %d, buf: '%s', env_valid: %d\n", len, buf, env_valid);
-
- while ((c = env_get_char(pos)) != '\0' && pos < (ENV_SIZE - len)) {
- uint_fast8_t i = 0;
-
-debug(" while: c: %02x, pos: %d\n ", c, pos);
-
- while (c == buf[i] && i <= len) {
-
-debug("%02x ", c);
-
- ++i;
- c = env_get_char(pos + i);
- }
-
-debug("\n c: %02x, i: %d, pos: %d\n", c, i, pos);
-
- if (i == len) {
- if ((ep->flags & EF_N_EEP) == 0)
- free(ep->name.ram);
- ep->name.eep = pos;
- if ((ep->flags & EF_V_EEP) == 0)
- free(ep->val.ram);
- ep->val.eep = pos + i;
- ep->flags &= ~EF_DIRTY;
- ep->flags |= EF_N_EEP | EF_V_EEP;
-
- /* TODO: */
- env_valid = save_env_valid;
- return 0;
- }
- pos += i + 1;
- while (((c = env_get_char(pos++)) != '\0') && pos < (ENV_SIZE - len))
- ;