Example #1
0
/*
 *  Command for passing strings directly to gdb.
 */
void
cmd_gdb(void)
{
	char buf[BUFSIZE];
        char **argv;

	argv = STREQ(args[0], "gdb") ? &args[1] : &args[0];

        if (*argv == NULL)
                cmd_usage(pc->curcmd, SYNOPSIS);

        if (STREQ(*argv, "set") && argv[1]) {
                /*
                 *  Intercept set commands in case something has to be done
		 *  here or elsewhere.
                 */ 
                if (STREQ(argv[1], "gdb")) {
                        cmd_set();
                        return;
                }
                if (STREQ(argv[1], "output-radix") && argv[2])
                        pc->output_radix = stol(argv[2], FAULT_ON_ERROR, NULL);
        }

	/*
	 *  If the command is not restricted, pass it on.
	 */
	if (!is_restricted_command(*argv, FAULT_ON_ERROR)) {
		if (STREQ(pc->command_line, "gdb")) {
			strcpy(buf, first_space(pc->orig_line));
			strip_beginning_whitespace(buf);
		} else
			strcpy(buf, pc->orig_line);

		if (pc->redirect & (REDIRECT_TO_FILE|REDIRECT_TO_PIPE))
			strip_redirection(buf);

		if (!gdb_pass_through(buf, NULL, GNU_RETURN_ON_ERROR))
			error(INFO, "gdb request failed: %s\n", buf);
	}
}
Example #2
0
char *
get_extra_flags(char *filename, char *initial)
{
	FILE *fp;
	char inbuf[512];
	char buf[512];

	if (!file_exists(filename))
		return (initial ? initial : NULL);

	if ((fp = fopen(filename, "r")) == NULL) {
		perror(filename);
		return (initial ? initial : NULL);
	}

	if (initial)
		strcpy(buf, initial);
	else
		buf[0] = '\0';

	while (fgets(inbuf, 512, fp)) {
		strip_linefeeds(inbuf);
		strip_beginning_whitespace(inbuf);
		strip_ending_whitespace(inbuf);
		if (inbuf[0] == '#')
			continue;
		if (strlen(inbuf)) {
			if (strlen(buf))
				strcat(buf, " ");			
			strcat(buf, inbuf);
		}
	}

	fclose(fp);

	if (strlen(buf))
		return strdup(buf);
	else 
		return NULL;
}
Example #3
0
/*
 *  Use the default gdb #defines unless there's a .gdb file.
 */
struct supported_gdb_version *
setup_gdb_defaults(void)
{
	FILE *fp;
	char inbuf[512];
	char buf[512];
	struct supported_gdb_version *sp;

	/*
	 *  Use the default, allowing for an override in .gdb
	 */
        if (!file_exists(".gdb")) 
		return store_gdb_defaults(NULL);

        if ((fp = fopen(".gdb", "r")) == NULL) {
        	perror(".gdb");
		return store_gdb_defaults(NULL);
	}

        while (fgets(inbuf, 512, fp)) {
		strip_linefeeds(inbuf);
		strip_beginning_whitespace(inbuf);

		strcpy(buf, inbuf);

		/*
		 *  Simple override.
		 */
		if (strcmp(buf, "5.3") == 0) {
			fclose(fp);
			sp = &supported_gdb_versions[GDB_5_3];
			fprintf(stderr, ".gdb configuration: %s\n\n", sp->GDB_VERSION_IN);
			return store_gdb_defaults(sp);
		}
		if (strcmp(buf, "6.0") == 0) {
			fclose(fp);
			sp = &supported_gdb_versions[GDB_6_0];
			fprintf(stderr, ".gdb configuration: %s\n\n", sp->GDB_VERSION_IN);
			return store_gdb_defaults(sp);
		}
		if (strcmp(buf, "6.1") == 0) {
			fclose(fp);
			sp = &supported_gdb_versions[GDB_6_1];
			fprintf(stderr, ".gdb configuration: %s\n", sp->GDB_VERSION_IN);
			return store_gdb_defaults(sp);
		}
		if (strcmp(buf, "7.0") == 0) {
			fclose(fp);
			sp = &supported_gdb_versions[GDB_7_0];
			fprintf(stderr, ".gdb configuration: %s\n", sp->GDB_VERSION_IN);
			return store_gdb_defaults(sp);
		}
		if (strcmp(buf, "7.3.1") == 0) {
			fclose(fp);
			sp = &supported_gdb_versions[GDB_7_3_1];
			fprintf(stderr, ".gdb configuration: %s\n", sp->GDB_VERSION_IN);
			return store_gdb_defaults(sp);
		}
		if (strcmp(buf, "7.6") == 0) {
			fclose(fp);
			sp = &supported_gdb_versions[GDB_7_6];
			fprintf(stderr, ".gdb configuration: %s\n", sp->GDB_VERSION_IN);
			return store_gdb_defaults(sp);
		}

        }
	
	fclose(fp);

	fprintf(stderr, ".gdb: rejected -- using default gdb\n\n");
 	return store_gdb_defaults(NULL);
}