diff --git a/src/rdb.c b/src/rdb.c index 0c572807..7d11a113 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -937,18 +937,23 @@ int rdbLoad(char *filename) { long loops = 0; fp = fopen(filename,"r"); - if (!fp) return REDIS_ERR; + if (!fp) { + errno = ENOENT; + return REDIS_ERR; + } if (fread(buf,9,1,fp) == 0) goto eoferr; buf[9] = '\0'; if (memcmp(buf,"REDIS",5) != 0) { fclose(fp); redisLog(REDIS_WARNING,"Wrong signature trying to load DB from file"); + errno = EINVAL; return REDIS_ERR; } rdbver = atoi(buf+5); if (rdbver < 1 || rdbver > 2) { fclose(fp); redisLog(REDIS_WARNING,"Can't handle RDB format version %d",rdbver); + errno = EINVAL; return REDIS_ERR; } diff --git a/src/redis.c b/src/redis.c index 302bf438..f7900fbd 100644 --- a/src/redis.c +++ b/src/redis.c @@ -1651,8 +1651,13 @@ int main(int argc, char **argv) { if (loadAppendOnlyFile(server.appendfilename) == REDIS_OK) redisLog(REDIS_NOTICE,"DB loaded from append only file: %ld seconds",time(NULL)-start); } else { - if (rdbLoad(server.dbfilename) == REDIS_OK) - redisLog(REDIS_NOTICE,"DB loaded from disk: %ld seconds",time(NULL)-start); + if (rdbLoad(server.dbfilename) == REDIS_OK) { + redisLog(REDIS_NOTICE,"DB loaded from disk: %ld seconds", + time(NULL)-start); + } else if (errno != ENOENT) { + redisLog(REDIS_WARNING,"Fatal error loading the DB. Exiting."); + exit(1); + } } if (server.ipfd > 0) redisLog(REDIS_NOTICE,"The server is now ready to accept connections on port %d", server.port);