Quellcode durchsuchen

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

tags/v0.9.3
Michael Brown vor 17 Jahren
Ursprung
Commit
2c569fb240
3 geänderte Dateien mit 40 neuen und 18 gelöschten Zeilen
  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 Datei anzeigen

@@ -46,13 +46,33 @@ static struct socket_opener socket_openers_end[0]
46 46
  * Open URI
47 47
  *
48 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 69
  * @v uri_string	URI string (e.g. "http://etherboot.org/kernel")
50 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 74
 	struct uri *uri;
54
-	struct uri_opener *opener;
55
-	int rc = -ENOTSUP;
75
+	int rc;
56 76
 
57 77
 	DBGC ( xfer, "XFER %p opening URI %s\n", xfer, uri_string );
58 78
 
@@ -60,16 +80,8 @@ int xfer_open_uri ( struct xfer_interface *xfer, const char *uri_string ) {
60 80
 	if ( ! uri )
61 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 85
 	uri_put ( uri );
74 86
 	return rc;
75 87
 }
@@ -114,10 +126,12 @@ int xfer_open_socket ( struct xfer_interface *xfer, int semantics,
114 126
  */
115 127
 int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args ) {
116 128
 	switch ( type ) {
117
-	case LOCATION_URI: {
129
+	case LOCATION_URI_STRING: {
118 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 135
 	case LOCATION_SOCKET: {
122 136
 		int semantics = va_arg ( args, int );
123 137
 		struct sockaddr *peer = va_arg ( args, struct sockaddr * );

+ 1
- 1
src/core/posix_io.c Datei anzeigen

@@ -224,7 +224,7 @@ int open ( const char *uri_string ) {
224 224
 	INIT_LIST_HEAD ( &file->data );
225 225
 
226 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 228
 		goto err;
229 229
 
230 230
 	/* Wait for open to succeed or fail */

+ 11
- 3
src/include/gpxe/open.h Datei anzeigen

@@ -15,13 +15,20 @@ struct sockaddr;
15 15
 
16 16
 /** Location types */
17 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 25
 	/** Location is a URI string
19 26
 	 *
20 27
 	 * Parameter list for open() is:
21 28
 	 *
22 29
 	 * const char *uri_string;
23 30
 	 */
24
-	LOCATION_URI = 1,
31
+	LOCATION_URI_STRING,
25 32
 	/** Location is a socket
26 33
 	 *
27 34
 	 * Parameter list for open() is:
@@ -73,8 +80,9 @@ struct socket_opener {
73 80
 /** Register a socket opener */
74 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 86
 extern int xfer_open_named_socket ( struct xfer_interface *xfer,
79 87
 				    int semantics, struct sockaddr *peer,
80 88
 				    const char *name, struct sockaddr *local );

Laden…
Abbrechen
Speichern