Too early in the morning. I just remembered fdopen() :)

Andi

At 07:14 AM 3/1/2001 +0200, Andi Gutmans wrote:
>This sounds pretty good. I'll try and look at the code this weekend. Some 
>of the code is really ugly especially the legacy code.
>When you say there are places which need a FILE * do you mean they just 
>need to check the id and check that it's a FILE * or do they convert 
>descriptors to FILE * (can't remember if that's possible or not :).
>
>Andi
>
>At 02:12 AM 3/1/2001 +0000, Wez Furlong wrote:
>>I've just looked through the code.
>>
>>
>>
>>The current issock stuff is a bit of a nightmare, but not too much of a 
>>problem.
>>
>>
>>
>>Most of the codebase seems to be fairly well behaved with FP_FGETS and 
>>friends (apart from the interbase extension, where it does the same thing 
>>as FP_FREAD without using FP_FREAD).
>>
>>
>>
>>The aim is to reduce three parameters to a single parameter for the FP_ 
>>family of macros.
>>
>>Ideally, it would be nice to do this for php_fopen_wrapper as well, and 
>>have it return the "php_file" abstraction we are proposing.  I'm not sure 
>>how well people will like this
>>
>>in general, but thats why I'm talking about it and not changing the code 
>>right now.
>>
>>
>>
>>Whenever an extension needs to open a file it also needs to complain if 
>>it can't open it.
>>
>>All over the code we have the same checks to see if it is a socket or a 
>>file, if it was opened, and if if wasn't complain, but first strip out a 
>>password from the filename/url etc. etc.
>>
>>
>>
>>A suggestion is this:
>>
>>
>>
>>typedef struct _php_file {
>>
>>          int file_type; /* bitfield: PHP_FILE_STDIO, PHP_FILE_SOCKET */
>>
>>          int (*write)(php_file *this_ptr, ....);
>>
>>          int (*read)(php_file *this_ptr,....);
>>
>>          int (*open)(php_file *this_ptr,....);
>>
>>          int (*close)(php_file *this_ptr,.....);
>>
>>          int (*seek)(php_file * this_ptr, ...); /* useful */
>>
>>} php_file;
>>
>>
>>
>>php_file * php_fopen_wrapper(char * filename, char * mode,
>>
>>          int options,
>>
>>          char ** opened_path,
>>
>>          int report_error
>>
>>          );
>>
>>
>>
>>Basically the same as the current implementation except that it returns 
>>an abstraction rather than a bunch of alternatives.
>>
>>The report error flag will cause the fopen wrapper to display the error 
>>message using the current active function name from the scripting engine, 
>>saving a few lines of code for each call where error reporting is 
>>required, and increasing maintainability.
>>
>>
>>
>>This is going to break code in 11 files, but that is relatively easy to fix.
>>
>>
>>
>>Some code requires that we get a FILE * back (the fopen_wrapper_for_zend 
>>is one), and some requires a socket (the code in fsock.c), so we need a 
>>way to get those out of the php_file:
>>
>>
>>
>>FILE * PHP_FILE_GET_STDIO_FILE(php_file *)
>>
>>int PHP_FILE_GET_SOCKETD(php_file *)
>>
>>
>>
>>[the names could be PHPFILEGETSTDIOFILE, but thats a different thread... ;-)]
>>
>>
>>
>>These could be implemented as macros, provided that all stdio based 
>>abstractions "descend" from a common structure where the FILE * lives at 
>>the same structure offset, and likewise for the socketd versions.  In the 
>>common case, there will only be one of each of these types anyway.
>>
>>
>>
>>I don't think that any of this will have a special impact on win32 
>>platforms (any more than unix), because we are too high level for that.
>>
>>
>>
>>The only real problem is cleaning up the code to use the php_file 
>>abstraction instead of assuming it's getting a stdio fp back.
>>
>>
>>
>>Once all this is done, the SSL code could be written as an fopen wrapper.
>>
>>
>>
>>I'm getting tired, so I may have overlooked something glaringly obvious; 
>>please let me know if
>>
>>I have, or if you have any other suggestions or improvements.
>>
>>
>>
>>--Wez.
>
>
>--
>PHP Development Mailing List <http://www.php.net/>
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>To contact the list administrators, e-mail: [EMAIL PROTECTED]


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to