tbm_drm_helper: remove setenv usage in server side 20/150720/9
authorBoram Park <boram1288.park@samsung.com>
Fri, 15 Sep 2017 04:15:14 +0000 (13:15 +0900)
committerBoram Park <boram1288.park@samsung.com>
Tue, 19 Sep 2017 00:35:34 +0000 (09:35 +0900)
Change-Id: I92280799de33036da24b848a7d4d1f22cbcefb5d

src/tbm_drm_helper.h
src/tbm_drm_helper_server.c

index d25f6d8..97b240c 100644 (file)
@@ -58,40 +58,33 @@ int tbm_drm_helper_wl_auth_server_init(void  *wl_display, int fd, const char *de
 void tbm_drm_helper_wl_auth_server_deinit(void);
 
 /**
- * @brief Get a fd from the specific enviroment variable.
+ * @brief Get a drm master fd.
  * @details
- * This function will dup the fd of the given enviroment variable.
+ * This function will dup the drm master fd.
    The Caller SHOULD close the fd.
-   In DRM system, a drm-master-fd SHOULD be shared between TDM backend and
-   TBM backend in display server side by using "TDM_DRM_MASTER_FD" and "TBM_DRM_MASTER_FD".
- * @param[in] env The given enviroment variable
+   In DRM system, a drm master fd SHOULD be shared between TDM backend and
+   TBM backend in display server side.
  * @return fd if success. Otherwise, -1.
- * @see #tdm_helper_set_tbm_master_fd()
+ * @see #tbm_drm_helper_set_tbm_master_fd()
+ * @see #tbm_drm_helper_unset_tbm_master_fd()
  */
 int  tbm_drm_helper_get_master_fd(void);
 
 /**
- * @brief Set the given fd to TBM_DRM_MASTER_FD enviroment variable.
+ * @brief Set a drm master fd with the given fd.
  * @details
- * In DRM system, a drm-master-fd @b SHOULD be shared between TDM backend and
-   TBM backend in display server side by using "TDM_DRM_MASTER_FD"
-   and "TBM_DRM_MASTER_FD".
+ * In DRM system, a drm master fd @b SHOULD be shared between TDM backend and
+   TBM backend in display server side.
  * @param[in] fd The given fd
- * @see #tdm_helper_set_tbm_master_fd()
+ * @see #tbm_drm_helper_get_master_fd()
  * @see #tbm_drm_helper_unset_tbm_master_fd()
  */
 void tbm_drm_helper_set_tbm_master_fd(int fd);
 
 /**
- * @brief Unset the TBM_DRM_MASTER_FD enviroment variable.
- * @details
- * In DRM system, a drm-master-fd @b SHOULD be shared between TDM backend and
-   TBM backend in display server side by using "TDM_DRM_MASTER_FD"
-   and "TBM_DRM_MASTER_FD".
- * @param[in] env The given enviroment variable
- * @param[in] fd The given fd
- * @see #tdm_helper_set_tbm_master_fd()
- * @see #tbm_drm_helper_unset_tbm_master_fd()
+ * @brief Unset a drm master fd.
+ * @see #tbm_drm_helper_get_master_fd()
+ * @see #tbm_drm_helper_set_tbm_master_fd()
  */
 void tbm_drm_helper_unset_tbm_master_fd(void);
 
index a440175..cb6254e 100644 (file)
@@ -53,6 +53,8 @@ struct wayland_tbm_drm_auth_server {
 
 struct wayland_tbm_drm_auth_server *tbm_drm_auth_srv;
 
+static int tbm_drm_master_fd = -1;
+
 /* LCOV_EXCL_START */
 static void
 _send_server_auth_info(struct wayland_tbm_drm_auth_server *tbm_drm_auth_srv,
@@ -298,42 +300,47 @@ tbm_drm_helper_wl_auth_server_deinit(void)
 int
 tbm_drm_helper_get_master_fd(void)
 {
-       const char *value;
-       int flags, fd = -1;
-       int new_fd = -1;
-       char *end;
-       errno = 0;
-
-       value = (const char*)getenv("TDM_DRM_MASTER_FD");
-       if (!value)
-               return -1;
+       int new_fd, flags, fd = -1;
 
-       const long int sl = strtol(value, &end, 10);
-       if (end == value) {
-               TBM_LOG_E("%s: not a decimal number\n", value);
-               return -1;
-       } else if (*end != '\0') {
-               TBM_LOG_E("%s: extra characters at end of input: %s\n", value, end);
-               return -1;
-       } else if ((sl == LONG_MIN || sl == LONG_MAX) && errno == ERANGE) {
-               TBM_LOG_E("%s out of range of type long\n", value);
-               return -1;
-       } else if (sl >= INT_MAX) {
-               TBM_LOG_E("%ld greater than INT_MAX\n", sl);
-               return -1;
-       } else if (sl <= INT_MIN) {
-               TBM_LOG_E("%ld less than INT_MIN\n", sl);
-               return -1;
-       } else {
-               int fd_max = tbm_bufmgr_get_fd_limit();
-               fd = (int)sl;
-               if (fd < 0 || fd > fd_max) {
-                       TBM_LOG_E("%d out of fd range\n", fd);
+#if 1  /* TODO: can't remove below at this time. This code SHOULD be removed later  */
+       const char *value = (const char*)getenv("TDM_DRM_MASTER_FD");
+       if (value) {
+               char *end;
+               const long int sl = strtol(value, &end, 10);
+
+               if (end == value) {
+                       TBM_LOG_E("%s: not a decimal number\n", value);
+                       return -1;
+               } else if (*end != '\0') {
+                       TBM_LOG_E("%s: extra characters at end of input: %s\n", value, end);
+                       return -1;
+               } else if ((sl == LONG_MIN || sl == LONG_MAX) && errno == ERANGE) {
+                       TBM_LOG_E("%s out of range of type long\n", value);
+                       return -1;
+               } else if (sl >= INT_MAX) {
+                       TBM_LOG_E("%ld greater than INT_MAX\n", sl);
+                       return -1;
+               } else if (sl <= INT_MIN) {
+                       TBM_LOG_E("%ld less than INT_MIN\n", sl);
                        return -1;
+               } else {
+                       int fd_max = tbm_bufmgr_get_fd_limit();
+                       fd = (int)sl;
+                       if (fd < 0 || fd > fd_max) {
+                               TBM_LOG_E("%d out of fd range\n", fd);
+                               return -1;
+                       }
                }
+       } else
+#endif
+       fd = tbm_drm_master_fd;
+
+       if (fd == -1) {
+               TBM_LOG_I("no presetted TBM DRM MASTER FD");
+               return -1;
        }
 
-       TBM_LOG_I("TDM_DRM_MASTER_FD: %d\n", fd);
+       TBM_LOG_I("TBM DRM MASTER FD: %d\n", fd);
 
        flags = fcntl(fd, F_GETFD);
        if (flags == -1) {
@@ -361,30 +368,29 @@ tbm_drm_helper_get_master_fd(void)
 void
 tbm_drm_helper_set_tbm_master_fd(int fd)
 {
-       char buf[32];
-       int ret;
+       int fd_max = tbm_bufmgr_get_fd_limit();
 
-       snprintf(buf, sizeof(buf), "%d", fd);
+       if (tbm_drm_master_fd == fd)
+               return;
 
-       ret = setenv("TBM_DRM_MASTER_FD", (const char*)buf, 1);
-       if (ret) {
-               TBM_LOG_E("failed to set TIZEN_DRM_MASTER_FD to %d\n", fd);
+       if (fd < 0 || fd > fd_max) {
+               TBM_LOG_E("%d out of fd range\n", fd);
                return;
        }
 
-       TBM_LOG_I("TBM_DRM_MASTER_FD: %d\n", fd);
+       if (tbm_drm_master_fd != -1)
+               TBM_LOG_W("already has TBM DRM MASTER FD: %d\n", tbm_drm_master_fd);
+
+       tbm_drm_master_fd = fd;
+
+       TBM_LOG_I("TBM DRM MASTER FD: %d\n", tbm_drm_master_fd);
 }
 
 void
 tbm_drm_helper_unset_tbm_master_fd(void)
 {
-       int ret;
-
-       ret = unsetenv("TBM_DRM_MASTER_FD");
-       if (ret) {
-               TBM_LOG_E("failed to unset TBM_DRM_MASTER_FD\n");
-               return;
-       }
+       tbm_drm_master_fd = -1;
+       TBM_LOG_I("TBM DRM MASTER FD: %d\n", tbm_drm_master_fd);
 }
 /* LCOV_EXCL_STOP */