aboutsummaryrefslogtreecommitdiff
path: root/cutils.c
diff options
context:
space:
mode:
authorRam Pai <linuxram@us.ibm.com>2009-06-26 17:41:50 -0700
committerAnthony Liguori <aliguori@us.ibm.com>2009-06-29 13:50:05 -0500
commit707c0dbc97cddfe8d2441b8259c6c526d99f2dd8 (patch)
treeb577fac92b2f94e300f1ce73804febecb615fdc8 /cutils.c
parentab4e5602a88402fdf7109e5093cace35a7471699 (diff)
downloadqemu-707c0dbc97cddfe8d2441b8259c6c526d99f2dd8.zip
qemu-707c0dbc97cddfe8d2441b8259c6c526d99f2dd8.tar.gz
qemu-707c0dbc97cddfe8d2441b8259c6c526d99f2dd8.tar.bz2
support colon in filenames
Problem: It is impossible to feed filenames with the character colon because qemu interprets such names as a protocol. For example filename scsi:0, is interpreted as a protocol by name "scsi". This patch allows user to espace colon characters. For example the above filename can now be expressed either as 'scsi\:0' or as file:scsi:0 anything following the "file:" tag is interpreted verbatin. However if "file:" tag is omitted then any colon characters in the string must be escaped using backslash. Here are couple of examples: scsi\:0\:abc is a local file scsi:0:abc http\://myweb is a local file by name http://myweb file:scsi:0:abc is a local file scsi:0:abc file:http://myweb is a local file by name http://myweb Signed-off-by: Ram Pai <linuxram@us.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'cutils.c')
-rw-r--r--cutils.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/cutils.c b/cutils.c
index 0623cf7..73d4e1f 100644
--- a/cutils.c
+++ b/cutils.c
@@ -24,6 +24,32 @@
#include "qemu-common.h"
#include "host-utils.h"
+/*
+ * fill first 'len' characters of 'buff' with pruned
+ * contents of 'str' delimited by the character 'c'.
+ * Escape character '\' is pruned off.
+ * Return pointer to the delimiting character.
+ */
+const char *fill_token(char *buf, const int len, const char *str, const char c)
+{
+ const char *p=str;
+ char *q=buf;
+
+ while (p < str+len-1) {
+ if (*p == c)
+ break;
+ if (*p == '\\') {
+ p++;
+ if (*p == '\0')
+ break;
+ }
+ *q++ = *p++;
+ }
+ *q='\0';
+ return p;
+}
+
+
void pstrcpy(char *buf, int buf_size, const char *str)
{
int c;