Diff for /embedtools/src/ub_env.c between versions 1.1.2.5 and 1.1.2.10

version 1.1.2.5, 2014/01/28 22:37:07 version 1.1.2.10, 2014/01/29 01:40:35
Line 8  env_t *env; Line 8  env_t *env;
 static int  static int
 ub_flash_io(const char *csSec, int mode)  ub_flash_io(const char *csSec, int mode)
 {  {
        int f, ret = 0;        int f, l, rlen;
         const char *str;          const char *str;
           size_t siz;
           ait_val_t v;
   
         FTRACE(4);          FTRACE(4);
   
           str = cfg_getAttribute(&cfg, csSec, "size");
           siz = strtol(str, NULL, 0);
           if (!siz)
                   return -1;
         str = cfg_getAttribute(&cfg, csSec, "drive");          str = cfg_getAttribute(&cfg, csSec, "drive");
         if (!str) {          if (!str) {
                 printf("Error:: drive not found!\n");                  printf("Error:: drive not found!\n");
                 return -1;                  return -1;
         }          }
   
           cfg_loadAttribute(&cfg, "ube", "lock", &v, UBE_LOCK);
           l = open(AIT_GET_STR(&v), O_CREAT | O_EXCL | O_WRONLY, 0644);
           if (l == -1) {
                   printf("Error:: Locked u-boot-env map %s\n", AIT_GET_STR(&v));
                   AIT_FREE_VAL(&v);
                   return -1;
           }
   
         f = open(str, mode);          f = open(str, mode);
         if (f == -1) {          if (f == -1) {
                 printf("Error:: Can't access u-boot-env device %s\n", str);                  printf("Error:: Can't access u-boot-env device %s\n", str);
                   close(l);
                   unlink(AIT_GET_STR(&v));
                   AIT_FREE_VAL(&v);
                 return -1;                  return -1;
         }          }
   
         if (mode & O_RDWR) {          if (mode & O_RDWR) {
        } else {                rlen = write(f, env, siz);
                 if (rlen != siz)
                         printf("Error:: written %d bytes != %d\n", rlen, siz);
                 else
                         VERB(3) printf("Written %d bytes\n", rlen);
                 lseek(f, 0, SEEK_SET);
         }          }
   
           rlen = read(f, env, siz);
           if (rlen != siz)
                   printf("Error:: readed %d bytes != %d\n", rlen, siz);
           else
                   VERB(3) printf("Readed %d bytes\n", rlen);
   
         close(f);          close(f);
        return ret;        close(l);
         unlink(AIT_GET_STR(&v));
         AIT_FREE_VAL(&v);
         return 0;
 }  }
   
   static inline const char *
   ub_envmatch(const char *csName, const char *e)
   {
           const char *str = NULL;
   
           while (*csName == *e++)
                   if (*csName++ == '=')
                           return e;
           if (!*csName && *(e - 1) == '=')
                   return e;
   
           return NULL;
   }
   
 int  int
 ub_load(const char *csSec)  ub_load(const char *csSec)
 {  {
Line 52  ub_load(const char *csSec) Line 97  ub_load(const char *csSec)
                 return -1;                  return -1;
         }          }
   
        return 0;        return ub_flash_io(csSec, O_RDONLY);
 }  }
   
 void  void
Line 67  ub_unload() Line 112  ub_unload()
 const char*  const char*
 ub_getenv(const char *csSec, const char *csName)  ub_getenv(const char *csSec, const char *csName)
 {  {
           char *e, *nxt;
           size_t dlen;
         const char *str = NULL;          const char *str = NULL;
   
   
         FTRACE(3);          FTRACE(3);
   
           str = cfg_getAttribute(&cfg, csSec, "size");
           dlen = strtol(str, NULL, 0);
           if (!dlen)
                   return NULL;
           else
                   dlen--;
   
           for (e = env->env_data; *e; e = nxt + 1) {
                   for (nxt = e; *nxt; nxt++)
                           if (nxt >= env->env_data + dlen) {
                                   printf("Error:: environment not terminated\n");
                                   return NULL;
                           }
   
                   str = ub_envmatch(csName, e);
                   if (str)
                           break;
           }
   
         return str;          return str;
 }  }
   
Line 78  int Line 145  int
 ub_setenv(const char *csSec, const char *csName, const char *csValue)  ub_setenv(const char *csSec, const char *csName, const char *csValue)
 {  {
         FTRACE(3);          FTRACE(3);
   
           return 0;
   }
   
   int
   ub_env(const char *csSec)
   {
           char *e, *nxt;
           size_t dlen;
           const char *str;
   
           FTRACE(3);
   
           str = cfg_getAttribute(&cfg, csSec, "size");
           dlen = strtol(str, NULL, 0);
           if (!dlen)
                   return -1;
           else
                   dlen--;
   
           for (e = env->env_data; *e; e = nxt + 1) {
                   for (nxt = e; *nxt; nxt++)
                           if (nxt >= env->env_data + dlen) {
                                   printf("Error:: environment not terminated\n");
                                   return -1;
                           }
   
                   printf("%s\n", e);
           }
   
         return 0;          return 0;
 }  }

Removed from v.1.1.2.5  
changed lines
  Added in v.1.1.2.10


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>