]> git.saurik.com Git - apple/xnu.git/blobdiff - libkern/kxld/kxld_versionmin.c
xnu-4570.1.46.tar.gz
[apple/xnu.git] / libkern / kxld / kxld_versionmin.c
index abbfaed6a55a70a19fc8555b79236f3d3a4252fa..36c22203f7e28542a55e5d9c8f53301799748895 100644 (file)
@@ -63,6 +63,31 @@ kxld_versionmin_init_from_macho(KXLDversionmin *versionmin, struct version_min_c
     versionmin->has_versionmin = TRUE;
 }
 
+void
+kxld_versionmin_init_from_build_cmd(KXLDversionmin *versionmin, struct build_version_command *src)
+{
+    check(versionmin);
+    check(src);
+    switch (src->platform) {
+    case PLATFORM_MACOS:
+        versionmin->platform = kKxldVersionMinMacOSX;
+        break;
+    case PLATFORM_IOS:
+        versionmin->platform = kKxldVersionMiniPhoneOS;
+        break;
+    case PLATFORM_TVOS:
+        versionmin->platform = kKxldVersionMinAppleTVOS;
+        break;
+    case PLATFORM_WATCHOS:
+        versionmin->platform = kKxldVersionMinWatchOS;
+        break;
+    default:
+        return;
+    }
+    versionmin->version = src->minos;
+    versionmin->has_versionmin = TRUE;
+}
+
 /*******************************************************************************
 *******************************************************************************/
 void
@@ -74,8 +99,9 @@ kxld_versionmin_clear(KXLDversionmin *versionmin)
 /*******************************************************************************
 *******************************************************************************/
 u_long
-kxld_versionmin_get_macho_header_size(void)
+kxld_versionmin_get_macho_header_size(__unused const KXLDversionmin *versionmin)
 {
+    /* TODO: eventually we can just use struct build_version_command */
     return sizeof(struct version_min_command);
 }
 
@@ -92,6 +118,7 @@ kxld_versionmin_export_macho(const KXLDversionmin *versionmin, u_char *buf,
     check(buf);
     check(header_offset);
 
+
     require_action(sizeof(*versionminhdr) <= header_size - *header_offset, finish,
         rval=KERN_FAILURE);
     versionminhdr = (struct version_min_command *) ((void *) (buf + *header_offset));
@@ -111,6 +138,8 @@ kxld_versionmin_export_macho(const KXLDversionmin *versionmin, u_char *buf,
         case kKxldVersionMinWatchOS:
             versionminhdr->cmd = LC_VERSION_MIN_WATCHOS;
             break;
+        default:
+            goto finish;
     }
     versionminhdr->cmdsize = (uint32_t) sizeof(*versionminhdr);
     versionminhdr->version = versionmin->version;