Changeset 80bfb601 in mainline for uspace/lib/c/generic/sysinfo.c


Ignore:
Timestamp:
2010-04-18T09:57:19Z (14 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d869398
Parents:
fce3536
Message:

improve sysinfo and stats documentation (no change in functionality)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/sysinfo.c

    rfce3536 r80bfb601  
    4040#include <bool.h>
    4141
     42/** Get sysinfo item type
     43 *
     44 * @param path Sysinfo path.
     45 *
     46 * @return Sysinfo item type.
     47 *
     48 */
    4249sysinfo_item_tag_t sysinfo_get_tag(const char *path)
    4350{
     
    4653}
    4754
     55/** Get sysinfo numerical value
     56 *
     57 * @param path  Sysinfo path.
     58 * @param value Pointer to store the numerical value to.
     59 *
     60 * @return EOK if the value was successfully read and
     61 *         is of SYSINFO_VAL_VAL type.
     62 *
     63 */
    4864int sysinfo_get_value(const char *path, sysarg_t *value)
    4965{
     
    5268}
    5369
     70/** Get sysinfo binary data size
     71 *
     72 * @param path  Sysinfo path.
     73 * @param value Pointer to store the binary data size.
     74 *
     75 * @return EOK if the value was successfully read and
     76 *         is of SYSINFO_VAL_DATA type.
     77 *
     78 */
    5479static int sysinfo_get_data_size(const char *path, size_t *size)
    5580{
     
    5883}
    5984
     85/** Get sysinfo binary data
     86 *
     87 * @param path  Sysinfo path.
     88 * @param value Pointer to store the binary data size.
     89 *
     90 * @return Binary data read from sysinfo or NULL if the
     91 *         sysinfo item value type is not binary data.
     92 *         The returned non-NULL pointer should be
     93 *         freed by free().
     94 *
     95 */
    6096void *sysinfo_get_data(const char *path, size_t *size)
    6197{
     98        /* The binary data size might change during time.
     99           Unfortunatelly we cannot allocate the buffer
     100           and transfer the data as a single atomic operation.
     101       
     102           Let's hope that the number of iterations is bounded
     103           in common cases. */
     104       
    62105        while (true) {
     106                /* Get the binary data size */
    63107                int ret = sysinfo_get_data_size(path, size);
    64                 if (ret != EOK)
     108                if (ret != EOK) {
     109                        /* Not binary data item */
    65110                        return NULL;
     111                }
    66112               
    67113                void *data = malloc(*size);
     
    69115                        return NULL;
    70116               
     117                /* Get the data */
    71118                ret = __SYSCALL4(SYS_SYSINFO_GET_DATA, (sysarg_t) path,
    72119                    (sysarg_t) str_size(path), (sysarg_t) data, (sysarg_t) *size);
     
    74121                        return data;
    75122               
     123                /* Dispose the buffer */
    76124                free(data);
    77125               
    78                 if (ret != ENOMEM)
     126                if (ret != ENOMEM) {
     127                        /* The failure to get the data was not caused
     128                           by wrong buffer size */
    79129                        return NULL;
     130                }
    80131        }
    81132}
Note: See TracChangeset for help on using the changeset viewer.