]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Revert "add support for '@' parameters"
authorJoel Rosdahl <joel@rosdahl.net>
Wed, 1 Aug 2012 14:24:29 +0000 (16:24 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Wed, 1 Aug 2012 14:24:29 +0000 (16:24 +0200)
This reverts commit e11912151cadc8d77edd8071c23c4366cc007bfb, which was
pushed erroneously.

args.c
ccache.c
ccache.h
test/test_args.c

diff --git a/args.c b/args.c
index aa0e5ac750b237987af535d87909ba098d32e32e..13a3d37c4d133aae402fad7210401b2fed532eaa 100644 (file)
--- a/args.c
+++ b/args.c
@@ -37,57 +37,17 @@ struct args *
 args_init_from_string(const char *command)
 {
        struct args *args;
-       const char *pos = command;
-       char *argbuf = x_malloc(strlen(command) + 1);
-       char *argpos = argbuf;
-       args = args_init(0, NULL);
-       argpos = argbuf;
-       char quoting = '\0';
-
-       while (1) {
-               switch (*pos) {
-               case '\\':
-                       pos++;
-                       if (*pos == '\0')
-                               continue;
-                       break;
+       char *p = x_strdup(command);
+       char *q = p;
+       char *word, *saveptr = NULL;
 
-               case '\"': case '\'':
-                       if (quoting != '\0') {
-                               if (quoting == *pos) {
-                                       quoting = '\0';
-                                       pos++;
-                                       continue;
-                               } else
-                                       break;
-                       } else {
-                               quoting = *pos;
-                               pos++;
-                               continue;
-                       }
-               case '\n': case '\t': case ' ':
-                       if (quoting)
-                               break;
-                       /* Fall through */
-               case '\0':
-                       /* end of token */
-                       *argpos = '\0';
-                       if (argbuf[0] != '\0')
-                               args_add(args, argbuf);
-                       argpos = argbuf;
-                       if (*pos == '\0')
-                               goto out;
-                       else {
-                               pos++;
-                               continue;
-                       }
-               }
-               *argpos = *pos;
-               pos++;
-               argpos++;
+       args = args_init(0, NULL);
+       while ((word = strtok_r(q, " \t\r\n", &saveptr))) {
+               args_add(args, word);
+               q = NULL;
        }
-out:
-       free(argbuf);
+
+       free(p);
        return args;
 }
 
@@ -97,63 +57,6 @@ args_copy(struct args *args)
        return args_init(args->argc, args->argv);
 }
 
-/* Insert all arguments in src into dest at position index.
- * If replace is true, the element at dest->argv[index] is replaced
- * with the contents of src and everything past it is shifted.
- * Otherwise, dest->argv[index] is also shifted.
- *
- * src is consumed by this operation and should not be freed or used
- * again by the caller */
-void
-args_insert(struct args *dest, int index, struct args *src, bool replace)
-{
-       int offset;
-       int j;
-
-       /* Adjustments made if we are replacing or shifting the element
-        * currently at dest->argv[index] */
-       offset = replace ? 1 : 0;
-
-       if (replace)
-               free(dest->argv[index]);
-
-       if (src->argc == 0) {
-               if (replace) {
-                       /* Have to shift everything down by 1 since
-                        * we replaced with an empty list */
-                       for (j = index; j < dest->argc; j++)
-                               dest->argv[j] = dest->argv[j + 1];
-                       dest->argc--;
-               }
-               args_free(src);
-               return;
-       }
-
-       if (src->argc == 1 && replace) {
-               /* Trivial case; replace with 1 element */
-               dest->argv[index] = src->argv[0];
-               src->argc = 0;
-               args_free(src);
-               return;
-       }
-
-       dest->argv = (char**)x_realloc(dest->argv,
-                       (src->argc + dest->argc + 1 - offset) *
-                       sizeof(char *));
-
-       /* Shift arguments over */
-       for (j = dest->argc; j >= index + offset; j--)
-               dest->argv[j + src->argc - offset] = dest->argv[j];
-
-       /* Copy the new arguments into place */
-       for (j = 0; j < src->argc; j++)
-               dest->argv[j + index] = src->argv[j];
-
-       dest->argc += src->argc - offset;
-       src->argc = 0;
-       args_free(src);
-}
-
 void
 args_free(struct args *args)
 {
index f133e6698fb01c5482ae3d58e45ad4567bde352b..e5c24817f531a6dab806d7d81e9738f910075f29 100644 (file)
--- a/ccache.c
+++ b/ccache.c
@@ -1455,31 +1455,9 @@ cc_process_args(struct args *orig_args, struct args **preprocessor_args,
                        goto out;
                }
 
-               if (str_startswith(argv[i], "@")) {
-                       char *argpath = argv[i] + 1;
-                       struct args *file_args;
-                       char *argdata;
-
-                       if (!(argdata = read_text_file(argpath, 0))) {
-                               cc_log("Coudln't read arg file %s", argpath);
-                               stats_update(STATS_ARGS);
-                               result = false;
-                               goto out;
-                       }
-
-                       file_args = args_init_from_string(argdata);
-                       free(argdata);
-
-                       args_insert(orig_args, i, file_args, true);
-
-                       argc = orig_args->argc;
-                       argv = orig_args->argv;
-                       i--;
-                       continue;
-               }
-
                /* These are always too hard. */
                if (compopt_too_hard(argv[i])
+                   || str_startswith(argv[i], "@")
                    || str_startswith(argv[i], "-fdump-")) {
                        cc_log("Compiler option %s is unsupported", argv[i]);
                        stats_update(STATS_UNSUPPORTED);
index ed04c04ee4db27141893981d06bc674c44e8cc14..7e258834fd8f03a8a855538b8a6fdd18fc22d53c 100644 (file)
--- a/ccache.h
+++ b/ccache.h
@@ -75,7 +75,6 @@ void args_free(struct args *args);
 void args_add(struct args *args, const char *s);
 void args_add_prefix(struct args *args, const char *s);
 void args_extend(struct args *args, struct args *to_append);
-void args_insert(struct args *dest, int index, struct args *src, bool replace);
 void args_pop(struct args *args, int n);
 void args_set(struct args *args, int index, const char *value);
 void args_strip(struct args *args, const char *prefix);
index a513c9dc46725840af3d738f96e6ed7dd57c7a7c..50608fc0b3b0690da45fdfbf98938a1be5bca7d8 100644 (file)
@@ -48,17 +48,14 @@ TEST(args_init_populated)
 
 TEST(args_init_from_string)
 {
-       struct args *args = args_init_from_string("first sec\\\tond\tthi\\\\rd\nfourth  \tfif\\ th \"si'x\\\" th\" 'seve\nth'\\");
+       struct args *args = args_init_from_string("first second\tthird\nfourth");
        CHECK(args);
-       CHECK_INT_EQ(7, args->argc);
+       CHECK_INT_EQ(4, args->argc);
        CHECK_STR_EQ("first", args->argv[0]);
-       CHECK_STR_EQ("sec\tond", args->argv[1]);
-       CHECK_STR_EQ("thi\\rd", args->argv[2]);
+       CHECK_STR_EQ("second", args->argv[1]);
+       CHECK_STR_EQ("third", args->argv[2]);
        CHECK_STR_EQ("fourth", args->argv[3]);
-       CHECK_STR_EQ("fif th", args->argv[4]);
-       CHECK_STR_EQ("si'x\" th", args->argv[5]);
-       CHECK_STR_EQ("seve\nth", args->argv[6]);
-       CHECK(!args->argv[7]);
+       CHECK(!args->argv[4]);
        args_free(args);
 }
 
@@ -147,44 +144,4 @@ TEST(args_to_string)
        args_free(args);
 }
 
-TEST(args_insert)
-{
-       struct args *args = args_init_from_string("first second third fourth fifth");
-
-       struct args *src1 = args_init_from_string("alpha beta gamma");
-       struct args *src2 = args_init_from_string("one");
-       struct args *src3 = args_init_from_string("");
-       struct args *src4 = args_init_from_string("alpha beta gamma");
-       struct args *src5 = args_init_from_string("one");
-       struct args *src6 = args_init_from_string("");
-
-       args_insert(args, 2, src1, true);
-       CHECK_STR_EQ(args_to_string(args),
-               "first second alpha beta gamma fourth fifth");
-       CHECK_INT_EQ(7, args->argc);
-       args_insert(args, 2, src2, true);
-       CHECK_STR_EQ(args_to_string(args),
-               "first second one beta gamma fourth fifth");
-       CHECK_INT_EQ(7, args->argc);
-       args_insert(args, 2, src3, true);
-       CHECK_STR_EQ(args_to_string(args),
-               "first second beta gamma fourth fifth");
-       CHECK_INT_EQ(6, args->argc);
-
-       args_insert(args, 1, src4, false);
-       CHECK_STR_EQ(args_to_string(args),
-               "first alpha beta gamma second beta gamma fourth fifth");
-       CHECK_INT_EQ(9, args->argc);
-       args_insert(args, 1, src5, false);
-       CHECK_STR_EQ(args_to_string(args),
-               "first one alpha beta gamma second beta gamma fourth fifth");
-       CHECK_INT_EQ(10, args->argc);
-       args_insert(args, 1, src6, false);
-       CHECK_STR_EQ(args_to_string(args),
-               "first one alpha beta gamma second beta gamma fourth fifth");
-       CHECK_INT_EQ(10, args->argc);
-
-       args_free(args);
-}
-
 TEST_SUITE_END