Index: trunk/i386/util/openUp.c =================================================================== --- trunk/i386/util/openUp.c (revision 0) +++ trunk/i386/util/openUp.c (revision 924) @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2001 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * The contents of this file constitute Original Code as defined in and + * are subject to the Apple Public Source License Version 1.1 (the + * "License"). You may not use this file except in compliance with the + * License. Please obtain a copy of the License at + * http://www.apple.com/publicsource and read it before using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ +/* + * Shantonu Sen <> + * openUp.c - program to set the "first-open-window" field of a volume + * + * Get the directory ID for the first argument, and set it as word 2 + * of the Finder Info fields for the volume it lives on + * + * cc -o openUp openUp.c + * Usage: openUp /Volumes/Foo/OpenMe/ + * + */ + +#include +#include +#include +#include +#include +#include +#include + +struct directoryinfo { + long unsigned length; + uintptr_t dirid; // changed from: u_int32_t dirid; +}; + +struct volumeinfo { + long unsigned length; + uintptr_t finderinfo[8]; // changed from: u_int32_t finderinfo[8]; +}; + + +int main(int argc, char *argv[]) { + char *path = NULL; + struct attrlist alist; + struct directoryinfo dirinfo; + struct volumeinfo volinfo; + struct statfs sfs; + + path = argv[1]; + + bzero(&alist, sizeof(alist)); + alist.bitmapcount = 5; + alist.commonattr = ATTR_CMN_OBJID; + + getattrlist(path, &alist, &dirinfo, sizeof(dirinfo), 0); + + printf("directory id: %lu\n", dirinfo.dirid); + + statfs(path, &sfs); + + printf("mountpoint: %s\n", sfs.f_mntonname); + + alist.commonattr = ATTR_CMN_FNDRINFO; + alist.volattr = ATTR_VOL_INFO; + + getattrlist(sfs.f_mntonname, &alist, &volinfo, sizeof(volinfo), 0); + volinfo.finderinfo[2] = dirinfo.dirid; + setattrlist(sfs.f_mntonname, &alist, volinfo.finderinfo, sizeof(volinfo.finderinfo), 0); + + return EXIT_SUCCESS; +} Index: trunk/i386/util/Cconfig =================================================================== --- trunk/i386/util/Cconfig (revision 923) +++ trunk/i386/util/Cconfig (revision 924) @@ -8,3 +8,11 @@ When in doubt, say "Y". source "i386/util/fdisk/Cconfig" + +config OPENUP + bool "openUp utility" + default n + help + Say Y here if you want to compile the openUp utility. + openUp is used to set the "first-open-window" field of a volume. + When in doubt, say "N". Index: trunk/i386/util/Makefile =================================================================== --- trunk/i386/util/Makefile (revision 923) +++ trunk/i386/util/Makefile (revision 924) @@ -17,7 +17,7 @@ include ${SRCROOT}/Make.rules PROGRAMS = machOconv dyldsymboltool -OBJECTS = dyldsymboltool.o32 dyldsymboltool.o64 machOconv.o32 machOconv.o64 +OBJECTS = dyldsymboltool.o32 dyldsymboltool.o64 machOconv.o32 machOconv.o64 ifeq (${CONFIG_BDMESG}, y) @@ -25,6 +25,12 @@ OBJECTS += bdmesg.o32 bdmesg.o64 endif +ifeq (${CONFIG_OPENUP}, y) +PROGRAMS += openUp +OBJECTS += openUp.o64 openUp.o32 +endif + + LDFLAGS := $(LDFALGS) -framework IOKit -framework CoreFoundation -mmacosx-version-min=10.5 SYMPROG = $(addprefix $(SYMROOT)/, $(PROGRAMS))