コード例 #1
0
ファイル: play-util.c プロジェクト: NickMcConnell/FAangband
/**
 * Return a version of the player's name safe for use in filesystems.
 */
const char *player_safe_name(struct player *p, bool strip_suffix)
{
    static char buf[40];
    int i;
    int limit = 0;

    if (op_ptr->full_name[0]) {
        char *suffix = find_roman_suffix_start(op_ptr->full_name);
        if (suffix)
            limit = suffix - op_ptr->full_name - 1;	/* -1 for preceding space */
        else
            limit = strlen(op_ptr->full_name);
    }

    for (i = 0; i < limit; i++) {
        char c = op_ptr->full_name[i];

        /* Convert all non-alphanumeric symbols */
        if (!isalpha((unsigned char) c) && !isdigit((unsigned char) c))
            c = '_';

        /* Build "base_name" */
        buf[i] = c;
    }

    /* Terminate */
    buf[i] = '\0';

    /* Require a "base" name */
    if (!buf[0])
        my_strcpy(buf, "PLAYER", sizeof buf);

    return buf;
}
コード例 #2
0
ファイル: player.c プロジェクト: BardurArantsson/angband
/**
 * Return a version of the player's name safe for use in filesystems.
 *
 * XXX This does not belong here.
 */
void player_safe_name(char *safe, size_t safelen, const char *name, bool strip_suffix)
{
	size_t i;
	size_t limit = 0;

	if (name) {
		char *suffix = find_roman_suffix_start(name);

		if (suffix) {
			limit = suffix - name - 1; /* -1 for preceding space */
		} else {
			limit = strlen(name);
		}
	}

	/* Limit to maximum size of safename buffer */
	limit = MIN(limit, safelen);

	for (i = 0; i < limit; i++) {
		char c = name[i];

		/* Convert all non-alphanumeric symbols */
		if (!isalpha((unsigned char)c) && !isdigit((unsigned char)c))
			c = '_';

		/* Build "base_name" */
		safe[i] = c;
	}

	/* Terminate */
	safe[i] = '\0';

	/* Require a "base" name */
	if (!safe[0])
		my_strcpy(safe, "PLAYER", safelen);
}