summaryrefslogtreecommitdiffstats
path: root/src/server/image.c
diff options
context:
space:
mode:
authorSimon Rettberg2016-11-09 17:16:00 +0100
committerSimon Rettberg2016-11-09 17:16:00 +0100
commit2977bfac0d66193b9bc3f0b991fbd30569c14ea9 (patch)
tree6d599006e3352fea73c057c153aee0fde34f1f3f /src/server/image.c
parent[FUSE] Little more verbosity in some error msg (diff)
downloaddnbd3-2977bfac0d66193b9bc3f0b991fbd30569c14ea9.tar.gz
dnbd3-2977bfac0d66193b9bc3f0b991fbd30569c14ea9.tar.xz
dnbd3-2977bfac0d66193b9bc3f0b991fbd30569c14ea9.zip
[SERVER] Fix loading of rid-based images in vmdk legacy mode
Diffstat (limited to 'src/server/image.c')
-rw-r--r--src/server/image.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/server/image.c b/src/server/image.c
index 1c0741a..b5bff23 100644
--- a/src/server/image.c
+++ b/src/server/image.c
@@ -1156,13 +1156,8 @@ static dnbd3_image_t *loadImageServer(char * const name, const uint16_t requeste
char imageFile[PATHLEN] = "";
uint16_t detectedRid = 0;
- if ( _vmdkLegacyMode ) {
- if ( strend( name, ".vmdk" ) ) {
- snprintf( imageFile, PATHLEN, "%s/%s", _basePath, name );
- detectedRid = MAX( 1, requestedRid );
- }
- } else if ( requestedRid != 0 ) {
- snprintf( imageFile, PATHLEN, "%s/%s.r%d", _basePath, name, requestedRid );
+ if ( requestedRid != 0 ) {
+ snprintf( imageFile, PATHLEN, "%s/%s.r%d", _basePath, name, (int)requestedRid );
detectedRid = requestedRid;
} else {
glob_t g;
@@ -1191,11 +1186,15 @@ static dnbd3_image_t *loadImageServer(char * const name, const uint16_t requeste
}
globfree( &g );
}
+ if ( _vmdkLegacyMode && requestedRid <= 1 && ( detectedRid == 0 || !file_isReadable( imageFile ) ) ) {
+ snprintf( imageFile, PATHLEN, "%s/%s", _basePath, name );
+ detectedRid = 1;
+ }
logadd( LOG_DEBUG2, "Trying to load %s:%d ( -> %d) as %s", name, (int)requestedRid, (int)detectedRid, imageFile );
// No file was determined, or it doesn't seem to exist/be readable
- if ( imageFile[0] == '\0' ) {
+ if ( detectedRid == 0 ) {
logadd( LOG_DEBUG2, "Not found, bailing out" );
- return image_get( name, detectedRid, true );
+ return image_get( name, requestedRid, true );
}
if ( !_vmdkLegacyMode && requestedRid == 0 ) {
// rid 0 requested - check if detected rid is readable, decrease rid if not until we reach 0