if (init_options(argc, argv, &fd, &path, &cmd, &stripe_unit, &stripe_count,
&object_size, &pool, &file_offset, &dir)){
usage();
+ if (fd >= 0) {
+ close(fd);
+ }
return 0;
}
err = ioctl(fd, CEPH_IOC_GET_LAYOUT, (unsigned long)&layout);
if (err) {
cerr << "Error getting layout: " << cpp_strerror(errno) << endl;
- return 1;
+ goto close_fd_exit;
}
if (layout.stripe_unit == 0) {
cerr << "layout not specified" << endl;
err = ioctl(fd, CEPH_IOC_GET_DATALOC, (unsigned long)&location);
if (err) {
cerr << "Error getting location: " << cpp_strerror(err) << endl;
- return 1;
+ goto close_fd_exit;
}
cout << "location.file_offset: " << location.file_offset << endl;
cout << "location.object_offset:" << location.object_offset << endl;
int ioctl_num = (dir ? CEPH_IOC_SET_LAYOUT_POLICY : CEPH_IOC_SET_LAYOUT);
if (pool == -1) {
cerr << "Pool not specified (use --pool <name or id>)" << endl;
- return 1;
+ goto close_fd_exit;
}
layout.data_pool = pool;
layout.object_size = object_size;
err = ioctl(fd, ioctl_num, (unsigned long)&layout);
if (err) {
cerr << "Error setting layout: " << cpp_strerror(errno) << endl;
- return 1;
+ goto close_fd_exit;
}
} else if (CMD_MAP == cmd) {
struct stat st;
err = ::fstat(fd, &st);
if (err < 0) {
cerr << "error statting file: " << cpp_strerror(errno) << endl;
- return 1;
+ goto close_fd_exit;
}
struct ceph_ioctl_layout layout;
err = ioctl(fd, CEPH_IOC_GET_LAYOUT, (unsigned long)&layout);
if (err) {
cerr << "Error getting layout: " << cpp_strerror(errno) << endl;
- return 1;
+ goto close_fd_exit;
}
printf("%15s %24s %12s %12s %s\n",
err = ioctl(fd, CEPH_IOC_GET_DATALOC, (unsigned long)&location);
if (err) {
cerr << "Error getting location: " << cpp_strerror(errno) << endl;
- return 1;
+ goto close_fd_exit;
}
printf("%15lld %24s %12lld %12lld %d\n",
off, location.object_name, (long long)location.object_offset,
} else {
cerr << "unknown cmd somehow set!" << endl;
usage();
- return 1;
+ goto close_fd_exit;
}
return 0;
+
+close_fd_exit:
+ if (fd >= 0) {
+ close(fd);
+ }
+ return 1;
}