replace uint32_t with u32
[vpp.git] / src / svm / svm.c
index 0442ecb..f97803c 100644 (file)
@@ -426,7 +426,7 @@ shm_name_from_svm_map_region_args (svm_map_region_args_t * a)
       if (a->name[0] == '/')
        name_offset = 1;
 
-      shm_name = format (0, "/%s-%s%c", a->root_path,
+      shm_name = format (0, "/%s-%s%c", &a->root_path[root_path_offset],
                         &a->name[name_offset], 0);
     }
   else
@@ -471,7 +471,7 @@ svm_map_region (svm_map_region_args_t * a)
 
   if (svm_fd >= 0)
     {
-      if (fchmod (svm_fd, 0770) < 0)
+      if (fchmod (svm_fd, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP) < 0)
        clib_unix_warning ("segment chmod");
       /* This turns out to fail harmlessly if the client starts first */
       if (fchown (svm_fd, a->uid, a->gid) < 0)
@@ -733,7 +733,7 @@ svm_mutex_cleanup (void)
     }
 }
 
-static void
+static int
 svm_region_init_internal (svm_map_region_args_t * a)
 {
   svm_region_t *rp;
@@ -742,7 +742,7 @@ svm_region_init_internal (svm_map_region_args_t * a)
 
   /* guard against klutz calls */
   if (root_rp)
-    return;
+    return -1;
 
   root_rp_refcount++;
 
@@ -757,7 +757,8 @@ svm_region_init_internal (svm_map_region_args_t * a)
   a->baseva += randomize_baseva;
 
   rp = svm_map_region (a);
-  ASSERT (rp);
+  if (!rp)
+    return -1;
 
   region_lock (rp, 3);
 
@@ -773,11 +774,15 @@ svm_region_init_internal (svm_map_region_args_t * a)
       vec_validate (mp, 0);
       mp->name_hash = hash_create_string (0, sizeof (uword));
       mp->root_path = a->root_path ? format (0, "%s%c", a->root_path, 0) : 0;
+      mp->uid = a->uid;
+      mp->gid = a->gid;
       rp->data_base = mp;
       svm_pop_heap (oldheap);
     }
   region_unlock (rp);
   root_rp = rp;
+
+  return 0;
 }
 
 void
@@ -797,7 +802,7 @@ svm_region_init (void)
   svm_region_init_internal (a);
 }
 
-void
+int
 svm_region_init_chroot (const char *root_path)
 {
   svm_map_region_args_t _a, *a = &_a;
@@ -811,7 +816,7 @@ svm_region_init_chroot (const char *root_path)
   a->uid = 0;
   a->gid = 0;
 
-  svm_region_init_internal (a);
+  return svm_region_init_internal (a);
 }
 
 void