]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rados_sync: misc bugfixes
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Fri, 6 May 2011 21:47:43 +0000 (14:47 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Fri, 6 May 2011 21:47:43 +0000 (14:47 -0700)
Avoid using a temporary c_str pointer when it goes out of scope.

Complain if XATTR_FULLNAME is empty, as well as missing.

Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/rados_sync.cc

index 7f218cbda24f098eb91bec557ee375d1e7c7175f..c1243ecf0f9cb19672da345b6b2f15fcc0c4b1f0 100644 (file)
@@ -152,9 +152,8 @@ public:
                            BackedUpObject **obj)
   {
     int ret;
-    ostringstream oss;
-    oss << dir_name << "/" << file_name;
-    const char *obj_path = oss.str().c_str();
+    char obj_path[strlen(dir_name) + strlen(file_name) + 2];
+    snprintf(obj_path, sizeof(obj_path), "%s/%s", dir_name, file_name);
     FILE *fp = fopen(obj_path, "r");
     if (!fp) {
       ret = errno;
@@ -166,7 +165,7 @@ public:
     }
     int fd = fileno(fp);
     struct stat st_buf;
-    memset(&st_buf, 0, sizeof(struct stat));
+    memset(&st_buf, 0, sizeof(st_buf));
     ret = fstat(fd, &st_buf);
     if (ret) {
       ret = errno;
@@ -178,8 +177,8 @@ public:
 
     // get fullname
     ssize_t res = fgetxattr(fd, XATTR_FULLNAME, NULL, 0);
-    if (res < 0) {
-      ret = errno;
+    if (res <= 0) {
+      ret = (res == 0) ? ENOATTR : errno;
       fclose(fp);
       if (ret == ENOATTR)
        cerr << "no " << XATTR_FULLNAME << " attribute found." << std::endl;