Browse Source

Allow xfer_open() to take a struct uri as well as a URI string.

tags/v0.9.3
Michael Brown 17 years ago
parent
commit
2c569fb240
3 changed files with 40 additions and 18 deletions
  1. 28
    14
      src/core/open.c
  2. 1
    1
      src/core/posix_io.c
  3. 11
    3
      src/include/gpxe/open.h

+ 28
- 14
src/core/open.c View File

46
  * Open URI
46
  * Open URI
47
  *
47
  *
48
  * @v xfer		Data transfer interface
48
  * @v xfer		Data transfer interface
49
+ * @v uri		URI
50
+ * @ret rc		Return status code
51
+ */
52
+int xfer_open_uri ( struct xfer_interface *xfer, struct uri *uri ) {
53
+	struct uri_opener *opener;
54
+
55
+	for ( opener = uri_openers ; opener < uri_openers_end ; opener++ ) {
56
+		if ( strcmp ( uri->scheme, opener->scheme ) == 0 )
57
+			return opener->open ( xfer, uri );
58
+	}
59
+
60
+	DBGC ( xfer, "XFER %p attempted to open unsupported URI scheme "
61
+	       "\"%s\"\n", xfer, uri->scheme );
62
+	return -ENOTSUP;
63
+}
64
+
65
+/**
66
+ * Open URI string
67
+ *
68
+ * @v xfer		Data transfer interface
49
  * @v uri_string	URI string (e.g. "http://etherboot.org/kernel")
69
  * @v uri_string	URI string (e.g. "http://etherboot.org/kernel")
50
  * @ret rc		Return status code
70
  * @ret rc		Return status code
51
  */
71
  */
52
-int xfer_open_uri ( struct xfer_interface *xfer, const char *uri_string ) {
72
+int xfer_open_uri_string ( struct xfer_interface *xfer,
73
+			   const char *uri_string ) {
53
 	struct uri *uri;
74
 	struct uri *uri;
54
-	struct uri_opener *opener;
55
-	int rc = -ENOTSUP;
75
+	int rc;
56
 
76
 
57
 	DBGC ( xfer, "XFER %p opening URI %s\n", xfer, uri_string );
77
 	DBGC ( xfer, "XFER %p opening URI %s\n", xfer, uri_string );
58
 
78
 
60
 	if ( ! uri )
80
 	if ( ! uri )
61
 		return -ENOMEM;
81
 		return -ENOMEM;
62
 
82
 
63
-	for ( opener = uri_openers ; opener < uri_openers_end ; opener++ ) {
64
-		if ( strcmp ( uri->scheme, opener->scheme ) == 0 ) {
65
-			rc = opener->open ( xfer, uri );
66
-			goto done;
67
-		}
68
-	}
83
+	rc = xfer_open_uri ( xfer, uri );
69
 
84
 
70
-	DBGC ( xfer, "XFER %p attempted to open unsupported URI scheme "
71
-	       "\"%s\"\n", xfer, uri->scheme );
72
- done:
73
 	uri_put ( uri );
85
 	uri_put ( uri );
74
 	return rc;
86
 	return rc;
75
 }
87
 }
114
  */
126
  */
115
 int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args ) {
127
 int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args ) {
116
 	switch ( type ) {
128
 	switch ( type ) {
117
-	case LOCATION_URI: {
129
+	case LOCATION_URI_STRING: {
118
 		const char *uri_string = va_arg ( args, const char * );
130
 		const char *uri_string = va_arg ( args, const char * );
119
 
131
 
120
-		return xfer_open_uri ( xfer, uri_string ); }
132
+		return xfer_open_uri_string ( xfer, uri_string ); }
133
+	case LOCATION_URI:
134
+		
121
 	case LOCATION_SOCKET: {
135
 	case LOCATION_SOCKET: {
122
 		int semantics = va_arg ( args, int );
136
 		int semantics = va_arg ( args, int );
123
 		struct sockaddr *peer = va_arg ( args, struct sockaddr * );
137
 		struct sockaddr *peer = va_arg ( args, struct sockaddr * );

+ 1
- 1
src/core/posix_io.c View File

224
 	INIT_LIST_HEAD ( &file->data );
224
 	INIT_LIST_HEAD ( &file->data );
225
 
225
 
226
 	/* Open URI on data transfer interface */
226
 	/* Open URI on data transfer interface */
227
-	if ( ( rc = xfer_open_uri ( &file->xfer, uri_string ) ) != 0 )
227
+	if ( ( rc = xfer_open_uri_string ( &file->xfer, uri_string ) ) != 0 )
228
 		goto err;
228
 		goto err;
229
 
229
 
230
 	/* Wait for open to succeed or fail */
230
 	/* Wait for open to succeed or fail */

+ 11
- 3
src/include/gpxe/open.h View File

15
 
15
 
16
 /** Location types */
16
 /** Location types */
17
 enum {
17
 enum {
18
+	/** Location is a URI
19
+	 *
20
+	 * Parameter list for open() is:
21
+	 *
22
+	 * struct uri *uri;
23
+	 */
24
+	LOCATION_URI = 1,
18
 	/** Location is a URI string
25
 	/** Location is a URI string
19
 	 *
26
 	 *
20
 	 * Parameter list for open() is:
27
 	 * Parameter list for open() is:
21
 	 *
28
 	 *
22
 	 * const char *uri_string;
29
 	 * const char *uri_string;
23
 	 */
30
 	 */
24
-	LOCATION_URI = 1,
31
+	LOCATION_URI_STRING,
25
 	/** Location is a socket
32
 	/** Location is a socket
26
 	 *
33
 	 *
27
 	 * Parameter list for open() is:
34
 	 * Parameter list for open() is:
73
 /** Register a socket opener */
80
 /** Register a socket opener */
74
 #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
81
 #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
75
 
82
 
76
-extern int xfer_open_uri ( struct xfer_interface *xfer,
77
-			   const char *uri_string );
83
+extern int xfer_open_uri ( struct xfer_interface *xfer, struct uri *uri );
84
+extern int xfer_open_uri_string ( struct xfer_interface *xfer,
85
+				  const char *uri_string );
78
 extern int xfer_open_named_socket ( struct xfer_interface *xfer,
86
 extern int xfer_open_named_socket ( struct xfer_interface *xfer,
79
 				    int semantics, struct sockaddr *peer,
87
 				    int semantics, struct sockaddr *peer,
80
 				    const char *name, struct sockaddr *local );
88
 				    const char *name, struct sockaddr *local );

Loading…
Cancel
Save