@@ -87,23 +87,16 @@ private void addCommand(MachODylibCommand cmd) throws IOException {
87
87
var newBuffer = ByteBuffer .allocate (cmd .cmdSize );
88
88
newBuffer .order (buffer .order ());
89
89
cmd .put (newBuffer );
90
+ assert newBuffer .position () == cmd .cmdSize ;
90
91
newBuffer .position (0 );
91
- loadCommands .add (MachOLoadCommand .get (newBuffer ));
92
+ var newCmd = MachOLoadCommand .get (newBuffer );
93
+ loadCommands .add (newCmd );
94
+ assert newCmd .cmdSize == cmd .cmdSize ;
92
95
mh .nCmds += 1 ;
93
96
mh .sizeOfCmds += cmd .cmdSize ;
94
97
emptySpace -= cmd .cmdSize ;
95
98
}
96
99
97
- private void removeCodeSignature () {
98
- for (int i = 0 ; i < loadCommands .size (); ++i ) {
99
- var cmd = loadCommands .get (i );
100
- if (cmd .cmd == MachOLoadCommand .LC_CODE_SIGNATURE ) {
101
- removeCommand (cmd );
102
- LOGGER .fine (() -> String .format ("Removing code LC_CODE_SIGNATURE. New empty space is %d" , emptySpace ));
103
- }
104
- }
105
- }
106
-
107
100
private void removeId () {
108
101
for (int i = 0 ; i < loadCommands .size (); ++i ) {
109
102
var cmd = loadCommands .get (i );
@@ -128,7 +121,6 @@ private void removeLoad(String oldName) {
128
121
129
122
@ Override
130
123
public void setId (String newId ) throws IOException {
131
- removeCodeSignature ();
132
124
removeId ();
133
125
134
126
var newCmd = new MachODylibCommand (MachODylibCommand .LC_ID_DYLIB , MachODylibCommand .SIZE , new byte [0 ], MachODylibCommand .SIZE , 0 , 0 , 0 );
@@ -140,7 +132,6 @@ public void setId(String newId) throws IOException {
140
132
141
133
@ Override
142
134
public void changeOrAddDependency (String oldName , String newName ) throws IOException {
143
- removeCodeSignature ();
144
135
removeLoad (oldName );
145
136
146
137
var newCmd = new MachODylibCommand (MachODylibCommand .LC_LOAD_DYLIB , MachODylibCommand .SIZE , new byte [0 ], MachODylibCommand .SIZE , 0 , 0 , 0 );
@@ -154,9 +145,14 @@ public void changeOrAddDependency(String oldName, String newName) throws IOExcep
154
145
public void write (TruffleFile copy ) throws IOException , InterruptedException {
155
146
buffer .position (0 );
156
147
mh .put (buffer );
148
+ assert buffer .position () == MachOHeader .SIZE64 ;
157
149
for (var cmd : loadCommands ) {
158
150
cmd .put (buffer );
159
151
}
152
+ assert buffer .position () == MachOHeader .SIZE64 + mh .sizeOfCmds ;
153
+ for (int i = 0 ; i < emptySpace ; i ++) {
154
+ buffer .put ((byte )0 );
155
+ }
160
156
161
157
try (var os = copy .newOutputStream (StandardOpenOption .CREATE , StandardOpenOption .TRUNCATE_EXISTING , StandardOpenOption .WRITE )) {
162
158
os .write (buffer .array ());
0 commit comments