Changeset f039dba in mainline for uspace/lib/c
- Timestamp:
- 2012-08-17T09:57:27Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- b1912b0c
- Parents:
- f72ae3b
- Location:
- uspace/lib/c
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/io/log.c
rf72ae3b rf039dba 43 43 #include <ns.h> 44 44 45 typedef struct { 46 char *name; 47 sysarg_t top_log_id; 48 sysarg_t log_id; 49 } log_info_t; 50 51 static log_info_t default_log = { 52 .name = NULL, 53 .top_log_id = 0, 54 .log_id = 0 55 }; 56 57 static sysarg_t default_top_log_id; 45 static sysarg_t default_log_id; 58 46 59 47 /** Log messages are printed under this name. */ … … 85 73 86 74 ipc_call_t answer; 87 aid_t reg_msg = async_send_ 0(exchange, LOGGER_WRITER_CREATE_TOPLEVEL_LOG, &answer);75 aid_t reg_msg = async_send_1(exchange, LOGGER_WRITER_CREATE_LOG, LOG_NO_PARENT, &answer); 88 76 int rc = async_data_write_start(exchange, prog_name, str_size(prog_name)); 89 77 sysarg_t reg_msg_rc; … … 99 87 return reg_msg_rc; 100 88 101 default_top_log_id = IPC_GET_ARG1(answer); 102 default_log.top_log_id = default_top_log_id; 89 default_log_id = IPC_GET_ARG1(answer); 103 90 104 91 return EOK; 105 92 } 106 93 107 static int logger_message(async_sess_t *session, log_t ctx, log_level_t level, const char *message)94 static int logger_message(async_sess_t *session, log_t log, log_level_t level, const char *message) 108 95 { 109 96 async_exch_t *exchange = async_exchange_begin(session); … … 111 98 return ENOMEM; 112 99 } 113 log_info_t *log_info = ctx != 0 ? (log_info_t *) ctx : &default_log; 114 115 aid_t reg_msg = async_send_3(exchange, LOGGER_WRITER_MESSAGE, 116 log_info->top_log_id, log_info->log_id, level, NULL); 100 if (log == LOG_DEFAULT) 101 log = default_log_id; 102 103 aid_t reg_msg = async_send_2(exchange, LOGGER_WRITER_MESSAGE, 104 log, level, NULL); 117 105 int rc = async_data_write_start(exchange, message, str_size(message)); 118 106 sysarg_t reg_msg_rc; … … 206 194 log_t log_create(const char *name, log_t parent) 207 195 { 208 log_info_t *info = malloc(sizeof(log_info_t));209 if (info == NULL)210 return LOG_DEFAULT;211 info->name = NULL;212 213 if (parent == LOG_DEFAULT) {214 info->name = str_dup(name);215 if (info->name == NULL)216 goto error;217 info->top_log_id = default_top_log_id;218 } else {219 log_info_t *parent_info = (log_info_t *) parent;220 int rc = asprintf(&info->name, "%s/%s",221 parent_info->name, name);222 if (rc < 0)223 goto error;224 info->top_log_id = parent_info->top_log_id;225 }226 227 196 async_exch_t *exchange = async_exchange_begin(logger_session); 228 197 if (exchange == NULL) 229 goto error; 198 return parent; 199 200 if (parent == LOG_DEFAULT) 201 parent = default_log_id; 230 202 231 203 ipc_call_t answer; 232 aid_t reg_msg = async_send_1(exchange, LOGGER_WRITER_CREATE_ SUB_LOG,233 info->top_log_id, &answer);234 int rc = async_data_write_start(exchange, info->name, str_size(info->name));204 aid_t reg_msg = async_send_1(exchange, LOGGER_WRITER_CREATE_LOG, 205 parent, &answer); 206 int rc = async_data_write_start(exchange, name, str_size(name)); 235 207 sysarg_t reg_msg_rc; 236 208 async_wait_for(reg_msg, ®_msg_rc); … … 239 211 240 212 if ((rc != EOK) || (reg_msg_rc != EOK)) 241 goto error; 242 243 info->log_id = IPC_GET_ARG1(answer); 244 return (sysarg_t) info; 245 246 error: 247 free(info->name); 248 free(info); 249 return parent; 213 return parent; 214 215 return IPC_GET_ARG1(answer); 250 216 } 251 217 -
uspace/lib/c/generic/io/logctl.c
rf72ae3b rf039dba 81 81 } 82 82 83 int logctl_set_top_log_level(const char *namespace, log_level_t new_level) 84 { 85 async_exch_t *exchange = NULL; 86 int rc = start_logger_exchange(&exchange); 87 if (rc != EOK) 88 return rc; 89 90 aid_t reg_msg = async_send_1(exchange, LOGGER_CTL_SET_TOP_LOG_LEVEL, 91 new_level, NULL); 92 rc = async_data_write_start(exchange, namespace, str_size(namespace)); 93 sysarg_t reg_msg_rc; 94 async_wait_for(reg_msg, ®_msg_rc); 95 96 async_exchange_end(exchange); 97 98 if (rc != EOK) { 99 return rc; 100 } 101 102 return (int) reg_msg_rc; 103 } 104 105 int logctl_set_log_level(const char *namespace, const char *context, log_level_t new_level) 83 int logctl_set_log_level(const char *logname, log_level_t new_level) 106 84 { 107 85 async_exch_t *exchange = NULL; … … 112 90 aid_t reg_msg = async_send_1(exchange, LOGGER_CTL_SET_LOG_LEVEL, 113 91 new_level, NULL); 114 rc = async_data_write_start(exchange, namespace, str_size(namespace)); 115 int rc2 = async_data_write_start(exchange, context, str_size(context)); 92 rc = async_data_write_start(exchange, logname, str_size(logname)); 116 93 sysarg_t reg_msg_rc; 117 94 async_wait_for(reg_msg, ®_msg_rc); … … 122 99 return rc; 123 100 124 if (rc2 != EOK)125 return rc2;126 127 101 return (int) reg_msg_rc; 128 102 } -
uspace/lib/c/include/io/log.h
rf72ae3b rf039dba 53 53 typedef sysarg_t log_t; 54 54 #define PRIlogctx PRIxn 55 #define LOG_DEFAULT 0 55 #define LOG_DEFAULT ((log_t) -1) 56 #define LOG_NO_PARENT ((log_t) 0) 56 57 57 58 extern const char *log_level_str(log_level_t); -
uspace/lib/c/include/io/logctl.h
rf72ae3b rf039dba 37 37 38 38 extern int logctl_set_default_level(log_level_t); 39 extern int logctl_set_top_log_level(const char *, log_level_t); 40 extern int logctl_set_log_level(const char *, const char *, log_level_t); 39 extern int logctl_set_log_level(const char *, log_level_t); 41 40 42 41 #endif -
uspace/lib/c/include/ipc/logger.h
rf72ae3b rf039dba 38 38 typedef enum { 39 39 LOGGER_CTL_SET_DEFAULT_LEVEL = IPC_FIRST_USER_METHOD, 40 LOGGER_CTL_SET_TOP_LOG_LEVEL,41 40 LOGGER_CTL_SET_LOG_LEVEL 42 41 } logger_control_request_t; … … 44 43 typedef enum { 45 44 /** Followed by STRING, returns ID to be used for CREATE_SUB_LOG */ 46 LOGGER_WRITER_CREATE_TOPLEVEL_LOG = IPC_FIRST_USER_METHOD, 47 LOGGER_WRITER_CREATE_SUB_LOG, 45 LOGGER_WRITER_CREATE_LOG = IPC_FIRST_USER_METHOD, 48 46 LOGGER_WRITER_MESSAGE 49 47 } logger_writer_request_t;
Note:
See TracChangeset
for help on using the changeset viewer.