aboutsummaryrefslogtreecommitdiff
path: root/win32/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'win32/process.c')
-rw-r--r--win32/process.c63
1 files changed, 36 insertions, 27 deletions
diff --git a/win32/process.c b/win32/process.c
index 20e73baee..60fea01ad 100644
--- a/win32/process.c
+++ b/win32/process.c
@@ -57,33 +57,42 @@ parse_interpreter(const char *cmd, interp_t *interp)
57 char *path, *t; 57 char *path, *t;
58 int n; 58 int n;
59 59
60 n = open_read_close(cmd, interp->buf, sizeof(interp->buf)-1); 60 while (TRUE) {
61 if (n < 4) /* at least '#!/x' and not error */ 61 n = open_read_close(cmd, interp->buf, sizeof(interp->buf)-1);
62 return 0; 62 if (n < 4) /* at least '#!/x' and not error */
63 63 break;
64 /* 64
65 * See http://www.in-ulm.de/~mascheck/various/shebang/ for trivia 65 /*
66 * relating to '#!'. 66 * See http://www.in-ulm.de/~mascheck/various/shebang/ for trivia
67 */ 67 * relating to '#!'.
68 if (interp->buf[0] != '#' || interp->buf[1] != '!') 68 */
69 return 0; 69 if (interp->buf[0] != '#' || interp->buf[1] != '!')
70 interp->buf[n] = '\0'; 70 break;
71 if ((t=strchr(interp->buf, '\n')) == NULL) 71 interp->buf[n] = '\0';
72 return 0; 72 if ((t=strchr(interp->buf, '\n')) == NULL)
73 t[1] = '\0'; 73 break;
74 74 t[1] = '\0';
75 if ((path=strtok(interp->buf+2, " \t\r\n")) == NULL) 75
76 return 0; 76 if ((path=strtok(interp->buf+2, " \t\r\n")) == NULL)
77 77 break;
78 t = (char *)bb_basename(path); 78
79 if (*t == '\0') 79 t = (char *)bb_basename(path);
80 return 0; 80 if (*t == '\0')
81 81 break;
82 interp->path = path; 82
83 interp->name = t; 83 interp->path = path;
84 interp->opts = strtok(NULL, "\r\n"); 84 interp->name = t;
85 85 interp->opts = strtok(NULL, "\r\n");
86 return 1; 86 return 1;
87 }
88
89 if (is_suffixed_with_case(cmd, ".sh")) {
90 interp->path = (char *)DEFAULT_SHELL;
91 interp->name = (char *)DEFAULT_SHELL_SHORT_NAME;
92 interp->opts = NULL;
93 return 1;
94 }
95 return 0;
87} 96}
88 97
89/* 98/*