@@ -92,6 +92,56 @@ nr_php_packages_t* nr_php_packages_create() {
92
92
}
93
93
return h ;
94
94
}
95
+ static void clone_callback (void * value ,
96
+ const char * key ,
97
+ size_t key_len ,
98
+ void * userdata ) {
99
+ nr_php_packages_t * dest = NULL ;
100
+ nr_php_package_t * orig_pkg = NULL ;
101
+ nr_php_package_t * new_pkg = NULL ;
102
+
103
+ (void )key_len ; // Unused parameter
104
+ (void )key ; // Unused parameter
105
+
106
+ if (NULL == value || NULL == userdata ) {
107
+ return ;
108
+ }
109
+
110
+ if (NULL == ((nr_php_packages_t * )userdata )-> data ) {
111
+ return ;
112
+ }
113
+
114
+ /* Clone the package and add it to the destination hashmap */
115
+ // userdata is a pointer to nr_php_packages_t
116
+ // value is a pointer to nr_php_package_t
117
+ // we will clone the package and add it to the destination hashmap
118
+ dest = (nr_php_packages_t * )userdata ;
119
+ orig_pkg = (nr_php_package_t * )value ;
120
+ if (NULL == orig_pkg ) {
121
+ return ;
122
+ }
123
+ new_pkg = nr_php_package_create_with_source (orig_pkg -> package_name ,
124
+ orig_pkg -> package_version ,
125
+ orig_pkg -> source_priority );
126
+ nr_php_packages_add_package (dest , new_pkg );
127
+ }
128
+
129
+ nr_php_packages_t * nr_php_packages_clone (nr_php_packages_t * pkgs ) {
130
+ nr_php_packages_t * h = NULL ;
131
+
132
+ if (NULL == pkgs ) {
133
+ return NULL ;
134
+ }
135
+
136
+ h = nr_php_packages_create ();
137
+ if (NULL == h ) {
138
+ return NULL ;
139
+ }
140
+
141
+ nr_hashmap_apply (pkgs -> data , clone_callback , h );
142
+
143
+ return h ;
144
+ }
95
145
96
146
nr_php_package_t * nr_php_packages_add_package (nr_php_packages_t * h ,
97
147
nr_php_package_t * p ) {
0 commit comments