Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
k-sdk
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陈伟灿
k-sdk
Commits
8a8c252c
Commit
8a8c252c
authored
Aug 17, 2020
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】增加支持动态库的编译
【提交人】陈伟灿
parent
c58400bb
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
122 additions
and
48 deletions
+122
-48
application/kcloud/iot.mk
application/kcloud/iot.mk
+5
-4
application/kcloud/kcloud_log.c
application/kcloud/kcloud_log.c
+31
-0
application/kcloud/kcloud_log.h
application/kcloud/kcloud_log.h
+7
-25
application/kcloud/kcloud_main.c
application/kcloud/kcloud_main.c
+1
-0
application/kcloud/kk_topic_mng.c
application/kcloud/kk_topic_mng.c
+6
-6
common/zlog/iot.mk
common/zlog/iot.mk
+1
-1
midware/midware/iot.mk
midware/midware/iot.mk
+2
-2
test.conf
test.conf
+39
-0
tools/build-rules/_rules-top.mk
tools/build-rules/_rules-top.mk
+1
-0
tools/build-rules/rules.mk
tools/build-rules/rules.mk
+1
-0
tools/build-rules/scripts/gen_one_makefile.sh
tools/build-rules/scripts/gen_one_makefile.sh
+28
-10
No files found.
application/kcloud/iot.mk
View file @
8a8c252c
...
@@ -12,9 +12,10 @@ CFLAGS += -I$(TOP_DIR)/common/nanomsg/include
...
@@ -12,9 +12,10 @@ CFLAGS += -I$(TOP_DIR)/common/nanomsg/include
CFLAGS
+=
-I
$(TOP_DIR)
/common/ev/include
CFLAGS
+=
-I
$(TOP_DIR)
/common/ev/include
CFLAGS
+=
-I
$(TOP_DIR)
/common/sqlite
CFLAGS
+=
-I
$(TOP_DIR)
/common/sqlite
LDFLAGS
+=
-lapi_com
-lkk_tsl
LDFLAGS
+=
-lapi_com
-lkk_tsl
LDFLAGS
+=
-L
$(TOP_DIR)
/common/nanomsg
-
static
-
lnanomsg
LDFLAGS
+=
-L
$(TOP_DIR)
/common/nanomsg
-lnanomsg
LDFLAGS
+=
-L
$(TOP_DIR)
/common/ev
-static
-lev
LDFLAGS
+=
-L
$(TOP_DIR)
/common/ev
-lev
LDFLAGS
+=
-L
$(TOP_DIR)
/output/release/lib
-
static
-
lapi_com
LDFLAGS
+=
-L
$(TOP_DIR)
/output/release/lib
-lapi_com
LDFLAGS
+=
-liot_cjson
-liot_mqtt
-lsqlite
-ldl
-lm
-lanl
-lkk_hal
LDFLAGS
+=
-liot_cjson
-liot_mqtt
-lsqlite
-ldl
-lm
-lanl
-lkk_hal
application/kcloud/kcloud_log.c
0 → 100644
View file @
8a8c252c
#include "kcloud_log.h"
zlog_category_t
*
g_zlogC
;
int
kk_zlog_init
(
void
)
{
int
rc
;
rc
=
zlog_init
(
"test.conf"
);
if
(
rc
)
{
printf
(
"init failed
\n
"
);
return
-
1
;
}
g_zlogC
=
zlog_get_category
(
"my_kcloud"
);
if
(
!
g_zlogC
)
{
printf
(
"get cat fail
\n
"
);
zlog_fini
();
return
-
2
;
}
//zlog_info(c, "hello, zlog");
//zlog_debug(c, "debug hello, zlog");
//zlog_fini();
return
0
;
}
application/kcloud/kcloud_log.h
View file @
8a8c252c
#ifndef _LOGDEF_H_
#ifndef _LOGDEF_H_
#define _LOGDEF_H_
#define _LOGDEF_H_
#include "zlog.h"
enum
extern
zlog_category_t
*
g_zlogC
;
{
INFO
,
WARNING
,
ERROR
,
ALL
};
#define DEBUG_LEVEL ERROR
#define INFO_PRINT(info,...) \
#define INFO_PRINT(info,...) zlog_info(g_zlogC, info, ##__VA_ARGS__)
do{ \
#define ERROR_PRINT(info,...) zlog_error(g_zlogC, info, ##__VA_ARGS__)
if(DEBUG_LEVEL>=INFO){ \
#define WARNING_PRINT(info,...) zlog_warn(g_zlogC, info, ##__VA_ARGS__)
printf("Info %s,%s,%d:"info"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\
}while(0)
#define WARNING_PRINT(warning,...) \
do{ \
if(DEBUG_LEVEL>=WARNING){ \
printf("warning %s,%s,%d:"warning"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\
}while(0)
#define ERROR_PRINT(error,...) \
do{ \
if(DEBUG_LEVEL>=ERROR){ \
printf("error %s,%s,%d:"error"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\
}while(0)
int
kk_zlog_init
(
void
);
#endif
#endif
application/kcloud/kcloud_main.c
View file @
8a8c252c
...
@@ -63,6 +63,7 @@ int main(int argc, char* argv[])
...
@@ -63,6 +63,7 @@ int main(int argc, char* argv[])
int
rc
=
0
;
int
rc
=
0
;
//KK_Data_Hdl_Init();
//KK_Data_Hdl_Init();
kk_zlog_init
();
/*set the callback to get the device date to cloud*/
/*set the callback to get the device date to cloud*/
HAL_SetProduct_Type
(
PRODUCT_TPYE
);
HAL_SetProduct_Type
(
PRODUCT_TPYE
);
...
...
application/kcloud/kk_topic_mng.c
View file @
8a8c252c
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
#include "kk_product.h"
#include "kk_product.h"
#include "cJSON.h"
#include "cJSON.h"
#include "com_api.h"
#include "com_api.h"
#include "kcloud_log.h"
const
char
KK_URI_SYS_PREFIX
[]
=
"/sys/%s/%s/#"
;
const
char
KK_URI_SYS_PREFIX
[]
=
"/sys/%s/%s/#"
;
const
char
KK_URI_SYS_PREFIX_EX
[]
=
"/sys/%s/%s/"
;
const
char
KK_URI_SYS_PREFIX_EX
[]
=
"/sys/%s/%s/"
;
...
@@ -53,12 +54,12 @@ int KK_Subdev_Subscribe(const cJSON *root)
...
@@ -53,12 +54,12 @@ int KK_Subdev_Subscribe(const cJSON *root)
memset
(
url
,
0
,
url_len
);
memset
(
url
,
0
,
url_len
);
snprintf
(
url
,
url_len
,
KK_URI_OTA_PREFIX
,
productType
->
valuestring
,
productCode
->
valuestring
);
snprintf
(
url
,
url_len
,
KK_URI_OTA_PREFIX
,
productType
->
valuestring
,
productCode
->
valuestring
);
printf
(
"ota [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
INFO_PRINT
(
"ota [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
res
=
KK_MQTT_SubTopic
(
url
);
res
=
KK_MQTT_SubTopic
(
url
);
memset
(
url
,
0
,
url_len
);
memset
(
url
,
0
,
url_len
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX
,
productType
->
valuestring
,
productCode
->
valuestring
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX
,
productType
->
valuestring
,
productCode
->
valuestring
);
printf
(
"sys [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
INFO_PRINT
(
"sys [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
res
=
KK_MQTT_SubTopic
(
url
);
res
=
KK_MQTT_SubTopic
(
url
);
free
(
url
);
free
(
url
);
return
res
;
return
res
;
...
@@ -70,7 +71,6 @@ static int _kk_client_subscribe(char productType[PRODUCT_TYPE_LEN], char product
...
@@ -70,7 +71,6 @@ static int _kk_client_subscribe(char productType[PRODUCT_TYPE_LEN], char product
int
res
=
0
,
index
=
0
,
fail_count
=
0
;
int
res
=
0
,
index
=
0
,
fail_count
=
0
;
int
url_len
=
0
;
int
url_len
=
0
;
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
url_len
=
strlen
(
KK_URI_OTA_PREFIX
)
+
strlen
(
productType
)
+
strlen
(
productCode
)
+
1
;
url_len
=
strlen
(
KK_URI_OTA_PREFIX
)
+
strlen
(
productType
)
+
strlen
(
productCode
)
+
1
;
char
*
url
=
malloc
(
url_len
);
char
*
url
=
malloc
(
url_len
);
if
(
url
==
NULL
)
{
if
(
url
==
NULL
)
{
...
@@ -79,13 +79,13 @@ static int _kk_client_subscribe(char productType[PRODUCT_TYPE_LEN], char product
...
@@ -79,13 +79,13 @@ static int _kk_client_subscribe(char productType[PRODUCT_TYPE_LEN], char product
memset
(
url
,
0
,
url_len
);
memset
(
url
,
0
,
url_len
);
snprintf
(
url
,
url_len
,
KK_URI_OTA_PREFIX
,
productType
,
productCode
);
snprintf
(
url
,
url_len
,
KK_URI_OTA_PREFIX
,
productType
,
productCode
);
printf
(
"ota [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
INFO_PRINT
(
"ota [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
res
=
KK_MQTT_SubTopic
(
url
);
res
=
KK_MQTT_SubTopic
(
url
);
memset
(
url
,
0
,
url_len
);
memset
(
url
,
0
,
url_len
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX
,
productType
,
productCode
);
snprintf
(
url
,
url_len
,
KK_URI_SYS_PREFIX
,
productType
,
productCode
);
printf
(
"sys [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
INFO_PRINT
(
"sys [%s][%d] URL:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
url
);
res
=
KK_MQTT_SubTopic
(
url
);
res
=
KK_MQTT_SubTopic
(
url
);
...
@@ -225,7 +225,7 @@ char* KK_Make_Topic(cJSON *info)
...
@@ -225,7 +225,7 @@ char* KK_Make_Topic(cJSON *info)
break
;
break
;
}
}
printf
(
"[%s][%d] TOPIC:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
topic
);
INFO_PRINT
(
"[%s][%d] TOPIC:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
topic
);
cJSON_Delete
(
root
);
cJSON_Delete
(
root
);
return
topic
;
return
topic
;
errorreturn:
errorreturn:
...
...
common/zlog/iot.mk
View file @
8a8c252c
LIB
A_TARGET
:=
libzlog.a
LIB
SO_TARGET
:=
libzlog.so
midware/midware/iot.mk
View file @
8a8c252c
...
@@ -12,5 +12,5 @@ CFLAGS += -I$(TOP_DIR)/common/zlog
...
@@ -12,5 +12,5 @@ CFLAGS += -I$(TOP_DIR)/common/zlog
CFLAGS
+=
-I
$(TOP_DIR)
/src/tsl/tsl_handle
CFLAGS
+=
-I
$(TOP_DIR)
/src/tsl/tsl_handle
LDFLAGS
+=
-lapi_com
-liot_cjson
-lkk_tsl
LDFLAGS
+=
-lapi_com
-liot_cjson
-lkk_tsl
LDFLAGS
+=
-lsqlite
-ldl
-lm
LDFLAGS
+=
-lsqlite
-ldl
-lm
LDFLAGS
+=
-L
$(TOP_DIR)
/common/nanomsg
-static
-lnanomsg
-lanl
LDFLAGS
+=
-L
$(TOP_DIR)
/common/nanomsg
-lnanomsg
-lanl
LDFLAGS
+=
-L
$(TOP_DIR)
/common/ev
-static
-lev
-lkk_hal
-lzlog
LDFLAGS
+=
-L
$(TOP_DIR)
/common/ev
-lev
-lkk_hal
\ No newline at end of file
\ No newline at end of file
test.conf
0 → 100644
View file @
8a8c252c
[
global
]
strict
init
=
true
buffer
min
=
1024
buffer
max
=
2
MB
rotate
lock
file
= /
tmp
/
zlog
.
lock
default
format
=
"%d.%us %-6V (%c:%F:%L) - %m%n"
file
perms
=
600
[
levels
]
TRACE
=
10
CRIT
=
130
,
LOG_CRIT
[
formats
]
simple
=
"%m%n"
normal
=
"%d %m%n"
[
rules
]
my_
.
INFO
>
stdout
;
normal
*.*
"/home/kk/share/%c.log"
,
1
MB
*
2
;
normal
tools/build-rules/_rules-top.mk
View file @
8a8c252c
...
@@ -70,6 +70,7 @@ one:
...
@@ -70,6 +70,7 @@ one:
$(TOP_Q)
$(
foreach
V,
$(INFO_ENV_VARS)
,
$(V)
=
"
$
(
$(V)
)
"
)
\
$(TOP_Q)
$(
foreach
V,
$(INFO_ENV_VARS)
,
$(V)
=
"
$
(
$(V)
)
"
)
\
CFLAGS
=
"
$(
subst
"
,,
$(CFLAGS)
)
"
\
CFLAGS
=
"
$(
subst
"
,,
$(CFLAGS)
)
"
\
ALL_LIBS="
$(
strip
$(
foreach
V,
$(SUBDIRS)
,
$
(
LIBA_TARGET_
$(V)
)))
"
\
ALL_LIBS="
$(
strip
$(
foreach
V,
$(SUBDIRS)
,
$
(
LIBA_TARGET_
$(V)
)))
"
\
ALL_LIBSO="
$(
strip
$(
foreach
V,
$(SUBDIRS)
,
$
(
LIBSO_TARGET_
$(V)
)))
"
\
ALL_PROG="
$(
strip
$(
foreach
V,
$(SUBDIRS)
$(COMP_LIB_COMPONENTS)
,
$
(
TARGET_
$(V)
)))
"
\
ALL_PROG="
$(
strip
$(
foreach
V,
$(SUBDIRS)
$(COMP_LIB_COMPONENTS)
,
$
(
TARGET_
$(V)
)))
"
\
COMP_LIB_OBJS="
$(COMP_LIB_OBJS)
"
\
COMP_LIB_OBJS="
$(COMP_LIB_OBJS)
"
\
bash
$(RULE_DIR)
/scripts/gen_one_makefile.sh
bash
$(RULE_DIR)
/scripts/gen_one_makefile.sh
...
...
tools/build-rules/rules.mk
View file @
8a8c252c
...
@@ -59,6 +59,7 @@ SHOW_ENV_VARS := \
...
@@ -59,6 +59,7 @@ SHOW_ENV_VARS := \
LIBA_TARGET LIBSO_TARGET TARGET KMOD_TARGET
\
LIBA_TARGET LIBSO_TARGET TARGET KMOD_TARGET
\
SRCS OBJS LIB_SRCS LIB_OBJS LIB_HDRS_DIR LIB_HEADERS EXTRA_SRCS
\
SRCS OBJS LIB_SRCS LIB_OBJS LIB_HDRS_DIR LIB_HEADERS EXTRA_SRCS
\
$(
foreach
M,
$(LIBA_TARGET)
,LIB_SRCS_
$(
subst
.a,,
$(
subst
lib,,
$(M)
)))
\
$(
foreach
M,
$(LIBA_TARGET)
,LIB_SRCS_
$(
subst
.a,,
$(
subst
lib,,
$(M)
)))
\
$(
foreach
N,
$(LIBSO_TARGET)
,LIB_SRCS_
$(
subst
.so,,
$(
subst
lib,,
$(N)
)))
\
INTERNAL_INCLUDES TOP_DIR PRJ_NAME PRJ_VERSION COMP_LIB_COMPONENTS
\
INTERNAL_INCLUDES TOP_DIR PRJ_NAME PRJ_VERSION COMP_LIB_COMPONENTS
\
IMPORT_DIR IMPORT_VDRDIR CONFIG_DIR PACKAGE_DIR EXTERNAL_INCLUDES
\
IMPORT_DIR IMPORT_VDRDIR CONFIG_DIR PACKAGE_DIR EXTERNAL_INCLUDES
\
CONFIG_LIB_EXPORT OBJCOPY_FLAGS CONFIG_VENDOR COVERAGE_PROGS COVERAGE_CMD
\
CONFIG_LIB_EXPORT OBJCOPY_FLAGS CONFIG_VENDOR COVERAGE_PROGS COVERAGE_CMD
\
...
...
tools/build-rules/scripts/gen_one_makefile.sh
View file @
8a8c252c
...
@@ -42,15 +42,8 @@ else
...
@@ -42,15 +42,8 @@ else
)
)
fi
fi
ETC_OBJS
=
$(
for
i
in
${
ALL_LIBS
}
;
do
j
=
$(
grep
"
${
i
}
$"
${
STAMP_BLD_VAR
}
|
cut
-d
' '
-f1
|
sed
's|LIBA_TARGET_|LIB_OBJS_|g'
)
k
=
$(
grep
"
${
j
}
"
${
STAMP_BLD_VAR
}
|
cut
-d
' '
-f3-
)
for
l
in
${
k
}
;
do
echo
"
${
j
//LIB_OBJS_/
}
/
${
l
}
"
done
done
)
ALL_LIBS
=
$(
for
iter
in
${
ALL_LIBS
}
;
do
echo
-n
"
${
OUTPUT_DIR
}
/usr/lib/
${
iter
}
"
;
done
)
ALL_LIBS
=
$(
for
iter
in
${
ALL_LIBS
}
;
do
echo
-n
"
${
OUTPUT_DIR
}
/usr/lib/
${
iter
}
"
;
done
)
ALL_LIBSO
=
$(
for
iter
in
${
ALL_LIBSO
}
;
do
echo
-n
"
${
OUTPUT_DIR
}
/usr/lib/
${
iter
}
"
;
done
)
ALL_BINS
=
$(
for
iter
in
${
ALL_PROG
}
;
do
echo
-n
"
${
OUTPUT_DIR
}
/usr/bin/
${
iter
}
"
;
done
)
ALL_BINS
=
$(
for
iter
in
${
ALL_PROG
}
;
do
echo
-n
"
${
OUTPUT_DIR
}
/usr/bin/
${
iter
}
"
;
done
)
OUTPUT_D
=
$(
basename
${
OUTPUT_DIR
}
)
OUTPUT_D
=
$(
basename
${
OUTPUT_DIR
}
)
...
@@ -78,7 +71,7 @@ ${CFLAGS}
...
@@ -78,7 +71,7 @@ ${CFLAGS}
STAMP_LCOV :=
${
STAMP_LCOV
}
STAMP_LCOV :=
${
STAMP_LCOV
}
.PHONY: all
.PHONY: all
all:
${
OUTPUT_DIR
}
/usr/lib/
${
COMP_LIB
}
${
ALL_LIBS
}
${
ALL_BINS
}
all:
${
OUTPUT_DIR
}
/usr/lib/
${
COMP_LIB
}
${
ALL_LIBS
}
${
ALL_
LIBSO
}
${
ALL_
BINS
}
\$
(Q)cp -rf
${
EXTRA_INSTALL_HDRS
}
${
OUTPUT_DIR
}
/usr/include 2>/dev/null || true
\$
(Q)cp -rf
${
EXTRA_INSTALL_HDRS
}
${
OUTPUT_DIR
}
/usr/include 2>/dev/null || true
@rm -f *.gcda *.gcno
\$\$
(find
${
RULE_DIR
}
-name "*.o")
@rm -f *.gcda *.gcno
\$\$
(find
${
RULE_DIR
}
-name "*.o")
...
@@ -168,6 +161,31 @@ done)
...
@@ -168,6 +161,31 @@ done)
EOB
EOB
done
done
for
i
in
${
ALL_LIBSO
}
;
do
n
=
$(
basename
${
i
}
)
j
=
$(
grep
"
${
n
}
$"
${
STAMP_BLD_VAR
}
|cut
-d
' '
-f1
|sed
's:LIBSO_TARGET_::1'
)
k
=
$(
echo
'LIB_OBJS_'
"
${
j
}
"
)
k
=
$(
grep
-m
1
"^
${
k
}
"
${
STAMP_BLD_VAR
}
|cut
-d
' '
-f3-
)
k
=
$(
for
l
in
${
k
}
;
do
echo
-n
"
${
OUTPUT_DIR
}
/
${
j
}
/
${
l
}
"
;
done
)
for
m
in
${
k
}
;
do
echo
"sinclude
${
m
/.o/.d
}
"
>>
${
TARGET_FILE
}
done
echo
""
>>
${
TARGET_FILE
}
cat
<<
EOB
>>
${
TARGET_FILE
}
${
OUTPUT_DIR
}
/usr/lib/
${
n
}
:
\\
$(
for
m
in
${
k
}
;
do
echo
"
${
m
}
\\
"
;
done
)
\$
(Q)mkdir -p
\$\$
(dirname
\$
@)
\$
(Q)
\$
(call Brief_Log,"SO",
\$\$
(basename
\$
@),"...")
\$
(Q)
${
CC
}
-fPIC -shared
\$
^ -o
\$
@
EOB
done
for
i
in
${
ALL_PROG
}
;
do
for
i
in
${
ALL_PROG
}
;
do
j
=
$(
grep
-w
-m
1
"^SRCS_
${
i
}
"
${
STAMP_BLD_VAR
}
|cut
-d
' '
-f3-
)
j
=
$(
grep
-w
-m
1
"^SRCS_
${
i
}
"
${
STAMP_BLD_VAR
}
|cut
-d
' '
-f3-
)
k
=
$(
grep
-w
-m
1
"TARGET_.* = .*
${
i
}
"
${
STAMP_BLD_VAR
}
|cut
-d
' '
-f1
|sed
's:TARGET_::1'
)
k
=
$(
grep
-w
-m
1
"TARGET_.* = .*
${
i
}
"
${
STAMP_BLD_VAR
}
|cut
-d
' '
-f1
|sed
's:TARGET_::1'
)
...
@@ -188,7 +206,7 @@ for i in ${ALL_PROG}; do
...
@@ -188,7 +206,7 @@ for i in ${ALL_PROG}; do
cat
<<
EOB
>>
${
TARGET_FILE
}
cat
<<
EOB
>>
${
TARGET_FILE
}
${
OUTPUT_DIR
}
/usr/bin/
${
i
}
:
\\
${
OUTPUT_DIR
}
/usr/bin/
${
i
}
:
\\
${
EXTRA_SRCS
}
\\
${
EXTRA_SRCS
}
\\
$(
for
m
in
${
j
}
${
OUTPUT_DIR
}
/usr/lib/
${
COMP_LIB
}
${
ALL_LIBS
}
;
do
$(
for
m
in
${
j
}
${
OUTPUT_DIR
}
/usr/lib/
${
COMP_LIB
}
${
ALL_LIBS
}
${
ALL_LIBSO
}
;
do
echo
"
${
m
}
\\
"
|sed
's!//*!/!g'
;
echo
"
${
m
}
\\
"
|sed
's!//*!/!g'
;
done
)
done
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment