--- /dev/null
+#import <Foundation/Foundation.h>
+
+#include <sys/types.h>
+#include <pwd.h>
+#include <unistd.h>
+
+int main(int argc, const char *argv[]) {
+ if (argc < 2 || strcmp(argv[1], "remove") != 0)
+ return 0;
+
+ struct passwd *passwd = getpwnam("mobile");
+ if (passwd == NULL) {
+ perror("getpwnam");
+ return 0;
+ }
+
+ if (setregid(passwd->pw_gid, passwd->pw_gid) == -1) {
+ perror("setregid");
+ return 1;
+ }
+
+ if (setreuid(passwd->pw_uid, passwd->pw_uid) == -1) {
+ perror("setreuid");
+ return 1;
+ }
+
+ NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]);
+
+ NSString *path([NSString stringWithFormat:@"%@/Library/Preferences/com.apple.springboard.plist", NSHomeDirectory()]);
+
+ NSMutableDictionary *settings([[NSMutableDictionary alloc] initWithContentsOfFile:path]);
+ if (settings == nil)
+ return 0;
+
+ NSMutableDictionary *iconState([settings objectForKey:@"iconState"]);
+ if (iconState == nil)
+ return 0;
+
+ NSMutableDictionary *buttonBar([iconState objectForKey:@"buttonBar"]);
+ if (buttonBar == nil)
+ return 0;
+
+ NSMutableArray *buttonBarIconMatrix([buttonBar objectForKey:@"iconMatrix"]);
+ if (buttonBarIconMatrix == nil || [buttonBarIconMatrix count] == 0)
+ return 0;
+
+ NSMutableArray *buttonBarRow([buttonBarIconMatrix objectAtIndex:0]);
+ if (buttonBarRow == nil)
+ return 0;
+
+ NSMutableDictionary *fifth([buttonBarRow objectAtIndex:4]);
+
+ if (![fifth isEqual:[NSNumber numberWithInt:0]]) {
+ NSMutableArray *iconLists([iconState objectForKey:@"iconLists"]);
+ if (iconLists == nil)
+ iconLists = [NSMutableArray arrayWithCapacity:1];
+ else for (NSUInteger i(0), e([iconLists count]); i != e; ++i) {
+ NSMutableDictionary *iconList([iconLists objectAtIndex:i]);
+ NSMutableArray *iconMatrix([iconList objectForKey:@"iconMatrix"]);
+ if (iconMatrix == nil)
+ continue;
+
+ for (NSUInteger i(0), e([iconMatrix count]); i != e; ++i) {
+ NSMutableArray *row([iconMatrix objectAtIndex:i]);
+ NSUInteger spot([row indexOfObject:[NSNumber numberWithInteger:0]]);
+ if (spot != NSNotFound) {
+ [row replaceObjectAtIndex:i withObject:fifth];
+ goto save;
+ }
+ }
+ }
+
+ [iconLists addObject:[NSDictionary dictionaryWithObjectsAndKeys:
+ [NSArray arrayWithObjects:[NSArray arrayWithObject:fifth], nil], @"iconMatrix",
+ nil]];
+ }
+
+ save:
+ [buttonBarRow removeLastObject];
+ bool saved([settings writeToFile:path atomically:YES]);
+
+ [pool release];
+
+ return saved ? 0 : 1;
+}