X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=extras%2Fata_id%2Fata_id.c;h=9644a45b19482422404bc0091ac92b4d5f5a8501;hb=fed0ad76941e8021ba1a7d88f7a8ca9d89c99016;hp=927dbfabd7c83c2b564050b62778c136a735a28f;hpb=55e9959b155cefc5146f7a3d1ea73e74da91f303;p=elogind.git diff --git a/extras/ata_id/ata_id.c b/extras/ata_id/ata_id.c index 927dbfabd..9644a45b1 100644 --- a/extras/ata_id/ata_id.c +++ b/extras/ata_id/ata_id.c @@ -35,7 +35,8 @@ #include #include -#include "../../udev/udev.h" +#include "libudev.h" +#include "libudev-private.h" static void log_fn(struct udev *udev, int priority, const char *file, int line, const char *fn, @@ -44,43 +45,12 @@ static void log_fn(struct udev *udev, int priority, vsyslog(priority, format, args); } -static void set_str(char *to, const char *from, size_t count) -{ - size_t i, j, len; - - /* strip trailing whitespace */ - len = strnlen(from, count); - while (len && isspace(from[len-1])) - len--; - - /* strip leading whitespace */ - i = 0; - while (isspace(from[i]) && (i < len)) - i++; - - j = 0; - while (i < len) { - /* substitute multiple whitespace */ - if (isspace(from[i])) { - while (isspace(from[i])) - i++; - to[j++] = '_'; - } - /* skip chars */ - if (from[i] == '/') { - i++; - continue; - } - to[j++] = from[i++]; - } - to[j] = '\0'; -} - int main(int argc, char *argv[]) { struct udev *udev; struct hd_driveid id; char model[41]; + char model_enc[256]; char serial[21]; char revision[9]; const char *node = NULL; @@ -88,8 +58,8 @@ int main(int argc, char *argv[]) int fd; int rc = 0; static const struct option options[] = { - { "export", 0, NULL, 'x' }, - { "help", 0, NULL, 'h' }, + { "export", no_argument, NULL, 'x' }, + { "help", no_argument, NULL, 'h' }, {} }; @@ -97,7 +67,7 @@ int main(int argc, char *argv[]) if (udev == NULL) goto exit; - logging_init("ata_id"); + udev_log_init("ata_id"); udev_set_log_fn(udev, log_fn); while (1) { @@ -113,7 +83,7 @@ int main(int argc, char *argv[]) break; case 'h': printf("Usage: ata_id [--export] [--help] \n" - " --export print values as environemt keys\n" + " --export print values as environment keys\n" " --help print this help text\n\n"); default: rc = 1; @@ -146,9 +116,15 @@ int main(int argc, char *argv[]) goto close; } - set_str(model, (char *) id.model, 40); - set_str(serial, (char *) id.serial_no, 20); - set_str(revision, (char *) id.fw_rev, 8); + memcpy (model, id.model, 40); + model[40] = '\0'; + udev_util_encode_string(model, model_enc, sizeof(model_enc)); + udev_util_replace_whitespace((char *) id.model, model, 40); + udev_util_replace_chars(model, NULL); + udev_util_replace_whitespace((char *) id.serial_no, serial, 20); + udev_util_replace_chars(serial, NULL); + udev_util_replace_whitespace((char *) id.fw_rev, revision, 8); + udev_util_replace_chars(revision, NULL); if (export) { if ((id.config >> 8) & 0x80) { @@ -173,10 +149,12 @@ int main(int argc, char *argv[]) } else { printf("ID_TYPE=disk\n"); } + printf("ID_BUS=ata\n"); printf("ID_MODEL=%s\n", model); - printf("ID_SERIAL=%s\n", serial); + printf("ID_MODEL_ENC=%s\n", model_enc); printf("ID_REVISION=%s\n", revision); - printf("ID_BUS=ata\n"); + printf("ID_SERIAL=%s_%s\n", model, serial); + printf("ID_SERIAL_SHORT=%s\n", serial); } else { if (serial[0] != '\0') printf("%s_%s\n", model, serial); @@ -188,6 +166,6 @@ close: close(fd); exit: udev_unref(udev); - logging_close(); + udev_log_close(); return rc; }