Re: API Extensions

"Ingo Weinhold" <bonefish-CFLBMwTPW48UNGrzBIF7/[email protected]>
Newsgroups gmane.os.openbeos.storage
Message-ID <2292173710-BeMail@graete>
> > > > And the user functions:
> > > > status=5Ft partition=5Fsession(int deviceFD, int32 
> > > > sessionIndex,
> > > > const
> > > > char
> > > > *identifier, uint32 version, void *parameters, size=5Ft 
> > > > paramLen);
> > > > status=5Ft initialize=5Fpartition(int deviceFD, int32 
> > > > sessionIndex,
> > > > int32
> > > > partitionIndex, const char *identifier, uint32 version, char *
> > > > volumeName, void *parameters, size=5Ft paramLen);
> > > 
> > > I would replace the second with:
> > > status=5Ft initialize=5Fvolume(const char *where, const char *
> > > fileSystem,
> > > const char *volumeName, const char *parameters);
> > > 
> > > Or something similar, probably in unistd.h (accompanying 
> > > mount()).
> > 
> > Mmh, I could live with that, though it doesn't fit with the rest of 
> > the
> > functions.
> 
> Why not have both? If you're using the device API, getting 
> session_info's and partition_info's and what not, you're going to be 
> really annoyed if you have to convert that info to a path name to 
> initialize the partition; thus you want Ingo's version. But if you 
> just 
> feel like initializing a volume for whatever reason, Axel's version 
> would be nicer (and would probably make sense living in unistd.h).

That's fine as a compromise. Though, one might object, that it isn't a 
good idea to have different APIs (at the same abstraction level) that 
do the same thing.

> > Perhaps it's also better to drop that `version' stuff. I thought, 
> > it
> > could help to deal better with situations when different versions 
> > of a
> > FS exist, but probably that's a bit too esoteric.
> 
> Perhaps set things up so the latest version is used unless specified 
> (does C allow for default parameters? I can't remember...)?

Sadly C doesn't know default parameters. And, if the versions really 
matter, one would simply set up two differently named modules/FS add-
ons (cf. bfs vs. ofs) -- with priorities one can gracefully deal with 
such a situation. Therefore it is not really necessary to explicitly 
reflect versions stuff in the API.

> > > OTOH we can use this information to display names for partitions 
> > > with
> > > unknown or initialized file systems - so that Tracker displays 
> > > "Be
> > > volume" or "QNX volume" if the  recognizes a BFS/QNX partition 
> > > but 
> > > it
> > > cannot read the file system for whatever reason.
> > 
> > The extended_partition_info features both the type code
> > (`partition_code') and a human readable interpretation
> > (`partition_type'). partition_code is uint8 currently -- maybe it
> > should be resized to uint32.
> 
> Do you know offhand if anyone else has done this yet (and would the 
> intel partition specs allow the expansion to happen gracefully?). 
> IIRC, 
> there are very few type codes in the 8-bit range that haven't been 
> used, so it seems like something will have to be done one of these 
> days.

I don't really get the point, I'm afraid. The Intel/DOS/IBM/whatever 
partition layout specs are what they are, i.e. simply non-existent. ;-) 
But nevertheless one has no way to get around them. :-P So we can't 
just modify them, without risking, that other tools and operating 
systems will break. The reason for proposing a uint32 was merely to be 
prepared for other partitioning styles. I don't know about what it 
looks like on PPC. In the worst case it is even a string. Anyway, 
`partition_code' is merely a read-only field of informational 
(entertainment? ;-) use. For partitioning the parameters passed to the 
partition module would contain that kind of information.

CU, Ingo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.