diff options
| author | Eduardo Rocha <eduardo.rocha@openbossa.org> | 2006-03-24 14:36:27 +0000 | 
|---|---|---|
| committer | Eduardo Rocha <eduardo.rocha@openbossa.org> | 2006-03-24 14:36:27 +0000 | 
| commit | 8bc26371882b7ebaaa25ca0c2ce81b1f719daeea (patch) | |
| tree | 8177d4e9e2e3bdeca83dd835f9dc3fcbd90ffedc | |
| parent | b357f1d3900bca5575e88fcfc160945c6088608c (diff) | |
Fix a SEGFAULT that happens when textfile_del is called using an empty file.
| -rw-r--r-- | common/test_textfile.c | 22 | ||||
| -rw-r--r-- | common/textfile.c | 6 | 
2 files changed, 26 insertions, 2 deletions
diff --git a/common/test_textfile.c b/common/test_textfile.c index 5a5b22c5..8b60bbe8 100644 --- a/common/test_textfile.c +++ b/common/test_textfile.c @@ -48,6 +48,28 @@ int main(int argc, char *argv[])  	fd = creat(filename, 0644);  	close(fd); +	sprintf(key, "00:00:00:00:00:00"); +	if (textfile_del(filename, key) < 0)  +		fprintf(stderr, "%s (%d)\n", strerror(errno), errno); + +	memset(value, 0, sizeof(value)); +	if (textfile_put(filename, key, value) < 0) +		fprintf(stderr, "%s (%d)\n", strerror(errno), errno); + +	str = textfile_get(filename, key); +	if (!str) +		fprintf(stderr, "No value for %s\n", key); +	else +		free(str); + +	if (textfile_del(filename, key) < 0)  +		fprintf(stderr, "%s (%d)\n", strerror(errno), errno); + +	str = textfile_get(filename, key); +	if (str) { +		fprintf(stderr, "Found value for %s\n", key); +		free(str); +	}  	for (i = 1; i < max + 1; i++) {  		sprintf(key, "00:00:00:00:00:%02X", i); diff --git a/common/textfile.c b/common/textfile.c index bb55109c..84a72b3c 100644 --- a/common/textfile.c +++ b/common/textfile.c @@ -143,8 +143,10 @@ static int write_key(const char *pathname, const char *key, const char *value)  	size = st.st_size;  	if (!size) { -		pos = lseek(fd, size, SEEK_SET); -		err = write_key_value(fd, key, value); +		if (value) { +			pos = lseek(fd, size, SEEK_SET); +			err = write_key_value(fd, key, value); +		}  		goto unlock;  	}  | 
