- /* 命令の取得 */
- i = strcspn(p, " \t\n");
- p[i] = '\0';
- cmdl->cmd = strdup_chk(p, "cmdl.cmd");
- p += i + 1;
- /* 命令とオペランドの間の空白をスキップ */
- while(p[0] == ' ' || p[0] == '\t') {
- p++;
- }
- /* 改行かタブまでの文字列を取得 */
- /* 「'」で囲まれた文字列に含まれる場合があるため、空白は無視 */
- if((i = strcspn(p, "\t\n")) > 0) {
- p[i] = '\0';
- cmdl->opd = opdtok(p);
- } else {
- cmdl->opd = malloc_chk(sizeof(OPD), "cmdl.opd");
- cmdl->opd->opdc = 0;
- }
+ /* 命令取得の実行 */
+ i = strcspn(p, " \t");
+ cmdl->cmd = strndup_chk(p, i, "cmdl.cmd");
+
+ /* オペランドの取得 */
+ /* 文字列先頭を、命令の次の文字に移動 */
+ p += i;
+ /* 文字列先頭を、命令とオペランドの間の空白の後ろに移動 */
+ p += strspn(p, " \t");
+ /* オペランド取得の実行 */
+ cmdl->opd = opdtok(p);