|
@@ -94,56 +94,72 @@ int get_env_id (void)
|
|
|
* Command interface: print one or all environment variables
|
|
|
*/
|
|
|
|
|
|
-int do_printenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
+/*
|
|
|
+ * state 0: finish printing this string and return (matched!)
|
|
|
+ * state 1: no matching to be done; print everything
|
|
|
+ * state 2: continue searching for matched name
|
|
|
+ */
|
|
|
+static int printenv(char *name, int state)
|
|
|
{
|
|
|
- int i, j, k, nxt;
|
|
|
- int rcode = 0;
|
|
|
-
|
|
|
- if (argc == 1) { /* Print all env variables */
|
|
|
- for (i=0; env_get_char(i) != '\0'; i=nxt+1) {
|
|
|
- for (nxt=i; env_get_char(nxt) != '\0'; ++nxt)
|
|
|
- ;
|
|
|
- for (k=i; k<nxt; ++k)
|
|
|
- putc(env_get_char(k));
|
|
|
- putc ('\n');
|
|
|
-
|
|
|
- if (ctrlc()) {
|
|
|
- puts ("\n ** Abort\n");
|
|
|
- return 1;
|
|
|
+ int i, j;
|
|
|
+ char c, buf[17];
|
|
|
+
|
|
|
+ i = 0;
|
|
|
+ buf[16] = '\0';
|
|
|
+
|
|
|
+ while (state && env_get_char(i) != '\0') {
|
|
|
+ if (state == 2 && envmatch((uchar *)name, i) >= 0)
|
|
|
+ state = 0;
|
|
|
+
|
|
|
+ j = 0;
|
|
|
+ do {
|
|
|
+ buf[j++] = c = env_get_char(i++);
|
|
|
+ if (j == sizeof(buf) - 1) {
|
|
|
+ if (state <= 1)
|
|
|
+ puts(buf);
|
|
|
+ j = 0;
|
|
|
}
|
|
|
- }
|
|
|
+ } while (c != '\0');
|
|
|
|
|
|
- printf("\nEnvironment size: %d/%ld bytes\n",
|
|
|
- i, (ulong)ENV_SIZE);
|
|
|
+ if (state <= 1) {
|
|
|
+ if (j)
|
|
|
+ puts(buf);
|
|
|
+ putc('\n');
|
|
|
+ }
|
|
|
|
|
|
- return 0;
|
|
|
+ if (ctrlc())
|
|
|
+ return -1;
|
|
|
}
|
|
|
|
|
|
- for (i=1; i<argc; ++i) { /* print single env variables */
|
|
|
- char *name = argv[i];
|
|
|
+ if (state == 0)
|
|
|
+ i = 0;
|
|
|
+ return i;
|
|
|
+}
|
|
|
|
|
|
- k = -1;
|
|
|
+int do_printenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ int rcode = 0;
|
|
|
|
|
|
- for (j=0; env_get_char(j) != '\0'; j=nxt+1) {
|
|
|
+ if (argc == 1) {
|
|
|
+ /* print all env vars */
|
|
|
+ rcode = printenv(NULL, 1);
|
|
|
+ if (rcode < 0)
|
|
|
+ return 1;
|
|
|
+ printf("\nEnvironment size: %d/%ld bytes\n",
|
|
|
+ rcode, (ulong)ENV_SIZE);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
|
|
|
- for (nxt=j; env_get_char(nxt) != '\0'; ++nxt)
|
|
|
- ;
|
|
|
- k = envmatch((uchar *)name, j);
|
|
|
- if (k < 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- puts (name);
|
|
|
- putc ('=');
|
|
|
- while (k < nxt)
|
|
|
- putc(env_get_char(k++));
|
|
|
- putc ('\n');
|
|
|
- break;
|
|
|
- }
|
|
|
- if (k < 0) {
|
|
|
- printf ("## Error: \"%s\" not defined\n", name);
|
|
|
- rcode ++;
|
|
|
+ /* print selected env vars */
|
|
|
+ for (i = 1; i < argc; ++i) {
|
|
|
+ char *name = argv[i];
|
|
|
+ if (printenv(name, 2)) {
|
|
|
+ printf("## Error: \"%s\" not defined\n", name);
|
|
|
+ ++rcode;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
return rcode;
|
|
|
}
|
|
|
|