diff --git a/src/rdb.c b/src/rdb.c index 1cfcd044..0bafd97c 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -947,19 +947,24 @@ int rdbLoad(char *filename) { rio rdb; fp = fopen(filename,"r"); - if (!fp) return REDIS_ERR; + if (!fp) { + errno = ENOENT; + return REDIS_ERR; + } rioInitWithFile(&rdb,fp); if (rioRead(&rdb,buf,9) == 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 83aa3a82..dd693f6c 100644 --- a/src/redis.c +++ b/src/redis.c @@ -1802,8 +1802,13 @@ int main(int argc, char **argv) { if (loadAppendOnlyFile(server.appendfilename) == REDIS_OK) redisLog(REDIS_NOTICE,"DB loaded from append only file: %.3f seconds",(float)(ustime()-start)/1000000); } else { - if (rdbLoad(server.dbfilename) == REDIS_OK) - redisLog(REDIS_NOTICE,"DB loaded from disk: %.3f seconds",(float)(ustime()-start)/1000000); + if (rdbLoad(server.dbfilename) == REDIS_OK) { + redisLog(REDIS_NOTICE,"DB loaded from disk: %.3f seconds", + (float)(ustime()-start)/1000000); + } 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);