[cfe-commits] r86566 - /cfe/trunk/tools/c-index-test/c-index-test.c
Douglas Gregor
dgregor at apple.com
Mon Nov 9 10:34:28 PST 2009
On Nov 9, 2009, at 10:31 AM, Ted Kremenek wrote:
> Should we just have c-index-test.c be written in C++ and have it use
> the CommandLine library?
No, we should have a C program to test our C API.
- Doug
> On Nov 9, 2009, at 10:19 AM, Douglas Gregor wrote:
>
>> Author: dgregor
>> Date: Mon Nov 9 12:19:57 2009
>> New Revision: 86566
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=86566&view=rev
>> Log:
>> Improve c-index-test's parsing of the -code-completion-
>> at=file:line:column argument
>>
>> Modified:
>> cfe/trunk/tools/c-index-test/c-index-test.c
>>
>> Modified: cfe/trunk/tools/c-index-test/c-index-test.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=86566&r1=86565&r2=86566&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/tools/c-index-test/c-index-test.c (original)
>> +++ cfe/trunk/tools/c-index-test/c-index-test.c Mon Nov 9 12:19:57
>> 2009
>> @@ -113,38 +113,41 @@
>> memory (that will be owned by the caller) to store the file name.
>> */
>> int parse_file_line_column(const char *input, char **filename,
>> unsigned *line,
>> unsigned *column) {
>> - const char *colon = strchr(input, ':');
>> + /* Find the second colon. */
>> + const char *second_colon = strrchr(input, ':'), *first_colon;
>> char *endptr = 0;
>> - if (!colon) {
>> + if (!second_colon || second_colon == input) {
>> fprintf(stderr, "could not parse filename:line:column in
>> '%s'\n", input);
>> return 1;
>> }
>>
>> - /* Copy the file name. */
>> - *filename = (char*)malloc(colon - input);
>> - strncpy(*filename, input, colon - input);
>> - (*filename)[colon - input] = 0;
>> - input = colon + 1;
>> -
>> - /* Parse the line number. */
>> - *line = strtol(input, &endptr, 10);
>> - if (*endptr != ':') {
>> - fprintf(stderr, "could not parse line:column in '%s'\n", input);
>> - free(filename);
>> - *filename = 0;
>> - return 1;
>> - }
>> - input = endptr + 1;
>> -
>> /* Parse the column number. */
>> - *column = strtol(input, &endptr, 10);
>> + *column = strtol(second_colon + 1, &endptr, 10);
>> if (*endptr != 0) {
>> fprintf(stderr, "could not parse column in '%s'\n", input);
>> - free(filename);
>> - *filename = 0;
>> + return 1;
>> + }
>> +
>> + /* Find the first colon. */
>> + first_colon = second_colon - 1;
>> + while (first_colon != input && *first_colon != ':')
>> + --first_colon;
>> + if (first_colon == input) {
>> + fprintf(stderr, "could not parse line in '%s'\n", input);
>> + return 1;
>> + }
>> +
>> + /* Parse the line number. */
>> + *line = strtol(first_colon + 1, &endptr, 10);
>> + if (*endptr != ':') {
>> + fprintf(stderr, "could not parse line in '%s'\n", input);
>> return 1;
>> }
>>
>> + /* Copy the file name. */
>> + *filename = (char*)malloc(first_colon - input + 1);
>> + memcpy(*filename, input, first_colon - input);
>> + (*filename)[first_colon - input] = 0;
>> return 0;
>> }
>>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list